Sample code for 30+ languages & platforms
PureBasic

Call a JavaScript Function Returning an Array

See more JavaScript Examples

Demonstrates how to call a JavaScript function that returns an array.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkJs.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    ;  ----------------------------------------------------------------------------------
    ;  The Javascript functions called in this example are shown at the bottom of this page.
    ;  -----------------------------------------------------------------------------------

    sbScript.i = CkStringBuilder::ckCreate()
    If sbScript.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkStringBuilder::ckLoadFile(sbScript,"js_function_returning_array.js","utf-8")
    If success = 0
        Debug CkStringBuilder::ckLastErrorText(sbScript)
        CkStringBuilder::ckDispose(sbScript)
        ProcedureReturn
    EndIf

    js.i = CkJs::ckCreate()
    If js.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    result.i = CkJsonObject::ckCreate()
    If result.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::setCkEmitCompact(result, 0)

    ;  Call Eval to add the function to the context's global object
    success = CkJs::ckEval(js,sbScript,result)
    If success = 0
        ;  Examine the result for an exception.
        Debug CkJsonObject::ckEmit(result)

        ;  Also examine the LastErrorText.
        Debug CkJs::ckLastErrorText(js)
        CkStringBuilder::ckDispose(sbScript)
        CkJs::ckDispose(js)
        CkJsonObject::ckDispose(result)
        ProcedureReturn
    EndIf

    ;  ------------------------------------------------------------------------------
    ;  Call each function

    funcCall.i = CkJsonObject::ckCreate()
    If funcCall.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ;  Create JSON specifying the function name and arguments
    ;  The function has no arguments, so we only specify the name.

    CkJsonObject::ckUpdateString(funcCall,"name","getDays")

    success = CkJs::ckCallFunction(js,funcCall,result)
    If success = 0
        ;  Examine the result for an exception.
        Debug CkJsonObject::ckEmit(result)

        ;  Also examine the LastErrorText.
        Debug CkJs::ckLastErrorText(js)
        CkStringBuilder::ckDispose(sbScript)
        CkJs::ckDispose(js)
        CkJsonObject::ckDispose(result)
        CkJsonObject::ckDispose(funcCall)
        ProcedureReturn
    EndIf

    Debug CkJsonObject::ckEmit(result)

    ;  Output:
    ;  {
    ;    "type": "array",
    ;    "value": [
    ;      "Monday",
    ;      "Tuesday",
    ;      "Wednesday",
    ;      "Thursday",
    ;      "Friday"
    ;    ]
    ;  }

    ;  Access each array value..
    count.i = CkJsonObject::ckSizeOfArray(result,"value")
    i.i = 0
    While i < count
        CkJsonObject::setCkI(result, i)
        Debug CkJsonObject::ckStringOf(result,"value[i]")
        i = i + 1
    Wend

    ;  ------------------------------------------------------------------------------
    ;  Call the getRange(start,end) function

    CkJsonObject::ckClear(funcCall)
    CkJsonObject::ckUpdateString(funcCall,"name","getRange")
    CkJsonObject::ckUpdateInt(funcCall,"args[0]",14)
    CkJsonObject::ckUpdateInt(funcCall,"args[1]",21)
    success = CkJs::ckCallFunction(js,funcCall,result)
    Debug CkJsonObject::ckEmit(result)

    ;  Output:
    ;  {
    ;    "type": "array",
    ;    "value": [
    ;      14,
    ;      15,
    ;      16,
    ;      17,
    ;      18,
    ;      19,
    ;      20,
    ;      21
    ;    ]
    ;  }

    count = CkJsonObject::ckSizeOfArray(result,"value")
    i = 0
    While i < count
        CkJsonObject::setCkI(result, i)
        Debug Str(CkJsonObject::ckIntOf(result,"value[i]"))
        i = i + 1
    Wend

    ;  ------------------------------------------------------------------------------
    ;  Call the getEmployees() function

    CkJsonObject::ckClear(funcCall)
    CkJsonObject::ckUpdateString(funcCall,"name","getEmployees")
    success = CkJs::ckCallFunction(js,funcCall,result)
    Debug CkJsonObject::ckEmit(result)

    ;  Output:
    ;  {
    ;    "type": "array",
    ;    "value": [
    ;      {
    ;        "id": 101,
    ;        "name": "Alice",
    ;        "role": "Dev"
    ;      },
    ;      {
    ;        "id": 102,
    ;        "name": "Bob",
    ;        "role": "Manager"
    ;      }
    ;    ]
    ;  }

    count = CkJsonObject::ckSizeOfArray(result,"value")
    i = 0
    While i < count
        CkJsonObject::setCkI(result, i)
        Debug "name: " + CkJsonObject::ckStringOf(result,"value[i].name")
        Debug "role: " + CkJsonObject::ckStringOf(result,"value[i].role")
        Debug "id: " + Str(CkJsonObject::ckIntOf(result,"value[i].id"))
        Debug ""
        i = i + 1
    Wend


    CkStringBuilder::ckDispose(sbScript)
    CkJs::ckDispose(js)
    CkJsonObject::ckDispose(result)
    CkJsonObject::ckDispose(funcCall)


    ProcedureReturn
EndProcedure
JavaScript

function getDays() {
    return ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
}

function getRange(start, end) {
    var arr = [];
    for (var i = start; i <= end; i++) {
        arr.push(i);
    }
    return arr;
}
// Usage: getRange(1, 5) -> [1, 2, 3, 4, 5]

function getEmployees() {
    return [
        { id: 101, name: "Alice", role: "Dev" },
        { id: 102, name: "Bob", role: "Manager" }
    ];
}