在javascript中打印哈希表会话变量

时间:2015-09-02 02:41:39

标签: javascript perl

有谁知道如何从javascript访问哈希表会话变量?我可以在perl中创建一个并将其打印出来:

my $session = new CGI::Session(undef, undef, {Directory=>'/tmp'});
$session->param("controllerHash", \%controllerHash);
my $hash_ref = $session->param('controllerHash');
print Dumper $hash_ref;

但我无法弄清楚如何从javascript访问它。 我试过这样的事情:

function billingViewControllerChanged() {
      var controllerHash = Session['controllerHash'];
      for (var k in controllerHash) {
              console.log('key: '+k +', value: ' +controllerHash[k]);
      }
}

但我在firefox控制台中看到了这一点:

ReferenceError: Session is not defined

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你无法从这里到达那里。

服务器端代码在服务器上运行,javascript在浏览器中运行。

如果您需要访问服务器端会话数据,则需要将其包含在网页上的块中,或者提供带有CGI脚本的URL,该脚本以javascript可以使用的形式返回。

答案 1 :(得分:0)

最简单的方法是使用JSON序列化您的Perl数据结构,JavaScript可以本地解析。

use JSON;
my $session = new CGI::Session(undef, undef, {Directory=>'/tmp'});
$session->param("controllerHash", \%controllerHash);
my $hash_ref = $session->param('controllerHash');
my $controllerHashJSON = JSON->new->encode( $hash_ref );


print <<"__EOF__";    # in CGI, STDOUT is output to the client
function billingViewControllerChanged() {
      var controllerHash = $controllerHashJSON;
      for (var k in controllerHash) {
              console.log('key: '+k +', value: ' +controllerHash[k]);
      }
}
EOF