Tcl
Tcl
Call a JavaScript Function Returning an Array
See more JavaScript Examples
Demonstrates how to call a JavaScript function that returns an array.Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# ----------------------------------------------------------------------------------
# The Javascript functions called in this example are shown at the bottom of this page.
# -----------------------------------------------------------------------------------
set sbScript [new_CkStringBuilder]
set success [CkStringBuilder_LoadFile $sbScript "js_function_returning_array.js" "utf-8"]
if {$success == 0} then {
puts [CkStringBuilder_lastErrorText $sbScript]
delete_CkStringBuilder $sbScript
exit
}
set js [new_CkJs]
set result [new_CkJsonObject]
CkJsonObject_put_EmitCompact $result 0
# Call Eval to add the function to the context's global object
set success [CkJs_Eval $js $sbScript $result]
if {$success == 0} then {
# Examine the result for an exception.
puts [CkJsonObject_emit $result]
# Also examine the LastErrorText.
puts [CkJs_lastErrorText $js]
delete_CkStringBuilder $sbScript
delete_CkJs $js
delete_CkJsonObject $result
exit
}
# ------------------------------------------------------------------------------
# Call each function
set funcCall [new_CkJsonObject]
# Create JSON specifying the function name and arguments
# The function has no arguments, so we only specify the name.
CkJsonObject_UpdateString $funcCall "name" "getDays"
set success [CkJs_CallFunction $js $funcCall $result]
if {$success == 0} then {
# Examine the result for an exception.
puts [CkJsonObject_emit $result]
# Also examine the LastErrorText.
puts [CkJs_lastErrorText $js]
delete_CkStringBuilder $sbScript
delete_CkJs $js
delete_CkJsonObject $result
delete_CkJsonObject $funcCall
exit
}
puts [CkJsonObject_emit $result]
# Output:
# {
# "type": "array",
# "value": [
# "Monday",
# "Tuesday",
# "Wednesday",
# "Thursday",
# "Friday"
# ]
# }
# Access each array value..
set count [CkJsonObject_SizeOfArray $result "value"]
set i 0
while {$i < $count} {
CkJsonObject_put_I $result $i
puts [CkJsonObject_stringOf $result {value[i]}]
set i [expr $i + 1]
}
# ------------------------------------------------------------------------------
# Call the getRange(start,end) function
CkJsonObject_Clear $funcCall
CkJsonObject_UpdateString $funcCall "name" "getRange"
CkJsonObject_UpdateInt $funcCall "args[0]" 14
CkJsonObject_UpdateInt $funcCall "args[1]" 21
set success [CkJs_CallFunction $js $funcCall $result]
puts [CkJsonObject_emit $result]
# Output:
# {
# "type": "array",
# "value": [
# 14,
# 15,
# 16,
# 17,
# 18,
# 19,
# 20,
# 21
# ]
# }
set count [CkJsonObject_SizeOfArray $result "value"]
set i 0
while {$i < $count} {
CkJsonObject_put_I $result $i
puts [CkJsonObject_IntOf $result {value[i]}]
set i [expr $i + 1]
}
# ------------------------------------------------------------------------------
# Call the getEmployees() function
CkJsonObject_Clear $funcCall
CkJsonObject_UpdateString $funcCall "name" "getEmployees"
set success [CkJs_CallFunction $js $funcCall $result]
puts [CkJsonObject_emit $result]
# Output:
# {
# "type": "array",
# "value": [
# {
# "id": 101,
# "name": "Alice",
# "role": "Dev"
# },
# {
# "id": 102,
# "name": "Bob",
# "role": "Manager"
# }
# ]
# }
set count [CkJsonObject_SizeOfArray $result "value"]
set i 0
while {$i < $count} {
CkJsonObject_put_I $result $i
puts "name: [CkJsonObject_stringOf $result {value[i].name}]"
puts "role: [CkJsonObject_stringOf $result {value[i].role}]"
puts "id: [CkJsonObject_IntOf $result {value[i].id}]"
puts
set i [expr $i + 1]
}
delete_CkStringBuilder $sbScript
delete_CkJs $js
delete_CkJsonObject $result
delete_CkJsonObject $funcCall