Sample code for 30+ languages & platforms
Visual FoxPro

Call a JavaScript Function Returning an Array

See more JavaScript Examples

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

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loSbScript
LOCAL loJs
LOCAL loResult
LOCAL loFuncCall
LOCAL lnCount
LOCAL i

lnSuccess = 0

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

loSbScript = CreateObject('Chilkat.StringBuilder')
lnSuccess = loSbScript.LoadFile("js_function_returning_array.js","utf-8")
IF (lnSuccess = 0) THEN
    ? loSbScript.LastErrorText
    RELEASE loSbScript
    CANCEL
ENDIF

loJs = CreateObject('Chilkat.Js')

loResult = CreateObject('Chilkat.JsonObject')
loResult.EmitCompact = 0

*  Call Eval to add the function to the context's global object
lnSuccess = loJs.Eval(loSbScript,loResult)
IF (lnSuccess = 0) THEN
    *  Examine the result for an exception.
    ? loResult.Emit()

    *  Also examine the LastErrorText.
    ? loJs.LastErrorText
    RELEASE loSbScript
    RELEASE loJs
    RELEASE loResult
    CANCEL
ENDIF

*  ------------------------------------------------------------------------------
*  Call each function

loFuncCall = CreateObject('Chilkat.JsonObject')

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

loFuncCall.UpdateString("name","getDays")

lnSuccess = loJs.CallFunction(loFuncCall,loResult)
IF (lnSuccess = 0) THEN
    *  Examine the result for an exception.
    ? loResult.Emit()

    *  Also examine the LastErrorText.
    ? loJs.LastErrorText
    RELEASE loSbScript
    RELEASE loJs
    RELEASE loResult
    RELEASE loFuncCall
    CANCEL
ENDIF

? loResult.Emit()

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

*  Access each array value..
lnCount = loResult.SizeOfArray("value")
i = 0
DO WHILE i < lnCount
    loResult.I = i
    ? loResult.StringOf("value[i]")
    i = i + 1
ENDDO

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

loFuncCall.Clear()
loFuncCall.UpdateString("name","getRange")
loFuncCall.UpdateInt("args[0]",14)
loFuncCall.UpdateInt("args[1]",21)
lnSuccess = loJs.CallFunction(loFuncCall,loResult)
? loResult.Emit()

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

lnCount = loResult.SizeOfArray("value")
i = 0
DO WHILE i < lnCount
    loResult.I = i
    ? STR(loResult.IntOf("value[i]"))
    i = i + 1
ENDDO

*  ------------------------------------------------------------------------------
*  Call the getEmployees() function

loFuncCall.Clear()
loFuncCall.UpdateString("name","getEmployees")
lnSuccess = loJs.CallFunction(loFuncCall,loResult)
? loResult.Emit()

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

lnCount = loResult.SizeOfArray("value")
i = 0
DO WHILE i < lnCount
    loResult.I = i
    ? "name: " + loResult.StringOf("value[i].name")
    ? "role: " + loResult.StringOf("value[i].role")
    ? "id: " + STR(loResult.IntOf("value[i].id"))
    ? ""
    i = i + 1
ENDDO

RELEASE loSbScript
RELEASE loJs
RELEASE loResult
RELEASE loFuncCall

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" }
    ];
}