Visual FoxPro
Visual FoxPro
Call a JavaScript Function Passing an Object Argument
See more JavaScript Examples
Demonstrates how to call a JavaScript function with an argument that is an object.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loSbScript
LOCAL loJs
LOCAL loResult
LOCAL loFuncCall
LOCAL loArg
LOCAL loArgsArray
LOCAL loSbOut
lnSuccess = 0
* This is the JavaScript function we'll call:
* function describeCar(car) {
* console.log(`This is a ${car.year} ${car.make} ${car.model}.`);
* }
loSbScript = CreateObject('Chilkat.StringBuilder')
loSbScript.Append("function describeCar(car) { console.log(`This is a ${car.year} ${car.make} ${car.model}.`); }")
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 the function describeCar(car)
loFuncCall = CreateObject('Chilkat.JsonObject')
loFuncCall.EmitCompact = 0
* Create JSON specifying the function name and arguments
* In this case, there is only 1 argument, and it is an object.
* {
* "name": "describeCar",
* "args": [
* {
* "make": "Toyota",
* "model": "Corolla",
* "year": 2022
* }
* ]
* }
loFuncCall.UpdateString("name","describeCar")
* Create the JSON object that is the argument.
loArg = CreateObject('Chilkat.JsonObject')
loArg.UpdateString("make","Toyota")
loArg.UpdateString("model","Corolla")
loArg.UpdateInt("year",2022)
* Create the arguments array.
loArgsArray = CreateObject('Chilkat.JsonArray')
loArgsArray.AddObjectCopyAt(0,loArg)
* Add the "args" array to the funcCall.
loFuncCall.AppendArrayCopy("args",loArgsArray)
? loFuncCall.Emit()
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
RELEASE loArg
RELEASE loArgsArray
CANCEL
ENDIF
? loResult.Emit()
* The describeCar JavaScript function returns nothing.
* Therefore, the result is "undefined".
* {
* "type": "undefined",
* "value": "undefined"
* }
* However, the function emitted text to the console.
loSbOut = CreateObject('Chilkat.StringBuilder')
loJs.ConsoleOutputSb(loSbOut)
? loSbOut.GetAsString()
* Output:
* This is a 2022 Toyota Corolla.
* -----------------------------------------------------------
* Note: If the object argument is simple, this is an alternative
* and simpler way of creating the funcCall:
loFuncCall.Clear()
loFuncCall.UpdateString("name","describeCar")
loFuncCall.UpdateString("args[0].make","Toyota")
loFuncCall.UpdateString("args[0].model","Corolla")
loFuncCall.UpdateInt("args[0].year",2022)
? loFuncCall.Emit()
RELEASE loSbScript
RELEASE loJs
RELEASE loResult
RELEASE loFuncCall
RELEASE loArg
RELEASE loArgsArray
RELEASE loSbOut