【发布时间】:2016-08-12 07:46:53
【问题描述】:
我通过 jquery 传递
$.ajax({
'type' : 'POST',
'data' : {
'foo': {
'foo1':'bar1,
'foo2':'bar2'
}
},
'async' : false,
'global' : false,
'url' : "path/to/script.pl",
'dataType' : "json",
'success' : function(data) {
json = data;
},
'error' : function(jqxhr, textStatus, error) {
console.log("Request Failed: " + textStatus);
console.log(error);
}
});
到我的 cgi 脚本。
HTML参数:foo%5Bfoo1%5D=bar1&foo%5Bfoo2%5D=bar2
我不能通过使用$cgi->param('foo[]') 将foo 用作数组
CGI::param 在包主线 30 的列表上下文中调用,这可能导致漏洞。请参阅“获取单个命名参数的一个或多个值”中的警告
我似乎所有的数组元素都被硬编码到像'foo[foo1]'这样的参数中。
是否可以动态访问?
use Data::Dumper; print Dumper scalar $cgi->Vars();的输出
$VAR1 = bless( {
'use_tempfile' => 1,
'.fieldnames' => {},
'.charset' => 'ISO-8859-1',
'.parameters' => [
'foo[foo1]',
'foo[foo2]'
],
'escape' => 1,
'param' => {
'foo[foo2]' => [
'bar2'
],
'foo[foo1]' => [
'bar¹'
]
}
}, 'CGI' );
【问题讨论】:
-
如何将它传递给您的 CGI 脚本?那不是 perl 数据类型,它看起来像一个 json 对象。
-
是的,它的 json。我使用 jquery $.ajax 来传递它
-
想想可能需要更多的代码来弄清楚发生了什么。我还要指出 -
CGI已被弃用,尽管我明白这可能不是你可以控制的。 -
$VAR1 = bless( { '.parameters' => [ 'foo[foo1]', 'foo[foo2]' ], 'use_tempfile' => 1, '.charset' => ' ISO-8859-1', '.fieldnames' => {}, 'param' => { 'foo[foo2]' => [ 'bar2' ], 'foo[foo1]' => [ 'bar¹' ] } , '转义' => 1 }, 'CGI' );
-
在您的输入中没有
'foo[]'参数,只有'foo[foo2]'和'foo[foo1]'。你确定,jquery 是以 json 格式发送的吗?