perl哈希表和javascript var

问题描述:

我有一个CGI脚本, 我想从perl哈希表中输入一个valus到java脚本var tt。 (我在代码中提到什么可行,什么不可行)perl哈希表和javascript var

的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",...]} 
+0

注意:任何时候你在混合这样的语言时,建立你的javascript是有帮助的在perl中使用单引号字符串。这样你就不必摆脱所有的美元符号''''。 – Miller

可以use JSON模块用Perl引用转换为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",...]} 
+0

谢谢, 对我而言,你能解释一下怎么做吗? – user3485339

+0

@ user3485339我已经添加了一个示例。 – alex

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脚本将在此之前终止,因此所有变量都将丢失 - 您需要将任何数据存储在数据库中。