有谁知道如何从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
有什么想法吗?
答案 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