Sample code for 30+ languages & platforms
Perl Requires Chilkat v11.4.0+

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

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