有谁知道如何从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


有任何想法吗?

最佳答案

最简单的方法是使用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

10-08 00:03