perl哈希表和javascript var

时间:2014-04-01 13:56:34

标签: perl

我有一个CGI脚本, 我想从perl哈希表输入一个valus到java脚本var tt。 (我在代码中提到了哪些有效,哪些无效)

perl的:

%devices;
push @{$devices{$entity} }, $fname;

JS:

\$('#example tr').click(function(){
    \$(this, 'tr').each(function(index, tr) {
       var lines = \$('td', tr).map(function(index, td) {
        return \$(td).text();
    });

        var d = lines[0];

      var test = '@{$devices{'192.116.153.32'}}';    // working
      var tt =  '\@\{\$devices{' + "\'" + d + "\'" + "\}\}"; // Not working  
    alert(tt);

警报将打印如下内容:

{"192.116.153.32":["examle1.txt","examle2.txt",...]}

2 个答案:

答案 0 :(得分:3)

JavaScript和Perl是不同的语言。 JS代码和CGI脚本将在不同的计算机上运行

  • CGI脚本创建一个页面,然后传输到浏览器。这个页面是什么类型的数据并不重要,任何JS代码都只是这个脚本的简单数据。例如,您的代码段可能会变为

    $('#example tr').click(function(){
        $(this, 'tr').each(function(index, tr) {
            var lines = $('td', tr).map(function(index, td) {
                return $(td).text();
            });
    
            var d = lines[0];
    
            var test = 'the corresponding device';    // working
            var tt =  '@{$devices{' + "'" + d + "'" + "}}"; // Not working  
            alert(tt);
    

    这是浏览器看到的内容。 Perl代码对浏览器没有任何意义。

  • 然后,浏览器呈现页面并执行任何JS脚本。此时,不再与CGI脚本建立连接。

如果要连接到服务器,可以使用AJAX请求。但请注意,生成页面的第一个CGI脚本将在那时终止,因此所有变量都将丢失 - 您需要将任何数据存储在数据库中。

答案 1 :(得分:2)

您可以在Perl中使用use JSON模块将对Perl哈希的引用转换为包含JavaScript关联数组的字符串:

use JSON; # imports encode_json, decode_json, to_json and from_json.

 # simple and fast interfaces (expect/generate UTF-8)

 $utf8_encoded_json_text = encode_json \%devices;

JS:

\$('#example tr').click(function(){
    \$(this, 'tr').each(function(index, tr) {
       var lines = \$('td', tr).map(function(index, td) {
        return \$(td).text();
    });

        var d = lines[0];

      var test = '@{$devices{'192.116.153.32'}}';    // working
      var tt =  '$utf8_encoded_json_text'; // working  
    alert(tt);

警报将打印如下内容:

{"192.116.153.32":["examle1.txt","examle2.txt",...]}