Perl Requires Chilkat v11.4.0+
Chilkat2 Perl
Call a JavaScript Function Returning an Array
See more JavaScript Examples
Demonstrates how to call a JavaScript function that returns an array.Chilkat Perl Downloads
use strict;
use warnings;
use Chilkat2;
# ----------------------------------------------------------------------------------
# The Javascript functions called in this example are shown at the bottom of this page.
# -----------------------------------------------------------------------------------
my $sbScript = Chilkat2::StringBuilder->new;
my $success = $sbScript->LoadFile('js_function_returning_array.js', 'utf-8');
if (!$success) {
print $sbScript->LastErrorText, "\n";
exit;
}
my $js = Chilkat2::Js->new;
my $result = Chilkat2::JsonObject->new;
$result->EmitCompact(0);
# Call Eval to add the function to the context's global object
$success = $js->Eval($sbScript, $result);
if (!$success) {
# Examine the result for an exception.
print $result->Emit(), "\n";
# Also examine the LastErrorText.
print $js->LastErrorText, "\n";
exit;
}
# ------------------------------------------------------------------------------
# Call each function
my $funcCall = Chilkat2::JsonObject->new;
# Create JSON specifying the function name and arguments
# The function has no arguments, so we only specify the name.
$funcCall->UpdateString('name', 'getDays');
$success = $js->CallFunction($funcCall, $result);
if (!$success) {
# Examine the result for an exception.
print $result->Emit(), "\n";
# Also examine the LastErrorText.
print $js->LastErrorText, "\n";
exit;
}
print $result->Emit(), "\n";
# Output:
# {
# "type": "array",
# "value": [
# "Monday",
# "Tuesday",
# "Wednesday",
# "Thursday",
# "Friday"
# ]
# }
# Access each array value..
my $count = $result->SizeOfArray('value');
my $i = 0;
while ($i < $count) {
$result->I($i);
print $result->StringOf('value[i]'), "\n";
$i = $i + 1;
}
# ------------------------------------------------------------------------------
# Call the getRange(start,end) function
$funcCall->Clear();
$funcCall->UpdateString('name', 'getRange');
$funcCall->UpdateInt('args[0]', 14);
$funcCall->UpdateInt('args[1]', 21);
$success = $js->CallFunction($funcCall, $result);
print $result->Emit(), "\n";
# Output:
# {
# "type": "array",
# "value": [
# 14,
# 15,
# 16,
# 17,
# 18,
# 19,
# 20,
# 21
# ]
# }
$count = $result->SizeOfArray('value');
$i = 0;
while ($i < $count) {
$result->I($i);
print $result->IntOf('value[i]'), "\n";
$i = $i + 1;
}
# ------------------------------------------------------------------------------
# Call the getEmployees() function
$funcCall->Clear();
$funcCall->UpdateString('name', 'getEmployees');
$success = $js->CallFunction($funcCall, $result);
print $result->Emit(), "\n";
# Output:
# {
# "type": "array",
# "value": [
# {
# "id": 101,
# "name": "Alice",
# "role": "Dev"
# },
# {
# "id": 102,
# "name": "Bob",
# "role": "Manager"
# }
# ]
# }
$count = $result->SizeOfArray('value');
$i = 0;
while ($i < $count) {
$result->I($i);
print 'name: ', $result->StringOf('value[i].name'), "\n";
print 'role: ', $result->StringOf('value[i].role'), "\n";
print 'id: ', $result->IntOf('value[i].id'), "\n";
print "\n";
$i = $i + 1;
}
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" }
];
}