将Perl数组分配给Javascript变量

时间:2014-06-17 16:44:58

标签: javascript html arrays perl

我试图将Perl代码与JavaScript集成,并遇到了一个问题,我只想查看我在Perl中存储的数组的输出。下面的代码为我提供了已存储的数组中的正确元素,但我无法在JavaScript中看到这些元素。

my @list_of_vendors;
while(!$resultSet->EOF) {
push @list_of_vendors, $resultSet->Fields("vendor")->Value;
    $resultSet->MoveNext;
}

print "The First Vendor is: " . $list_of_vendors[0]. "\n";

这打印The First vendor is: 3D Systems以下代码似乎没有给我我想要的结果......

print <<ONE;
<html>
<body>
<h4> Test Vendor Array Javascript </h4>

<p id="demo"</p>

<script type="text/javascript" language="JavaScript">
var myVendorArray = @list_of_vendors;
document.write('<p> $list_of_vendors[0] is the same as myVendorArray[0] </p>');

</script>
</body>
</html>
ONE

我认为这会给我3D Systems is the same as 3D Systems,但它会为html屏幕留空。

有人能指出我可能做错了什么吗?或者指出我正确的方向使用notepad ++或其他一些有用的IDE来调试它。非常感谢!!

1 个答案:

答案 0 :(得分:3)

代码的heredoc中的所有内容都使用Perl进行插值,但客户端将其解释为JavaScript。所以,如果你写

@list_of_vendors = ("Alice","Bob","Charlie");
...
print <<EOF;
...
<script>
var list_of_vendors = @list_of_vendors;
...
EOF

客户会看到的是

var list_of_vendors = Alice Bob Charlie;

Perl具有非常好的工具,可以将Perl数据结构转换为JSON表示法,这很容易被JavaScript理解,所以你应该做类似的事情:

use JSON;
$list_of_vendors_json = encode_json(\@list_of_vendors);
...
var list_of_vendors = $list_of_vendors_json;
...

在这种情况下,浏览器会看到如下内容:

var list_of_vendors = ["Alice","Bob","Charlie"];

并且其余代码将按预期工作。