我通过jquery传递
L
到我的cgi脚本。
HTML参数:final long a = 24 * 60 * 60 * 1000 * 1000L;
我不能使用$.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);
}
});
作为数组使用foo%5Bfoo1%5D=bar1&foo%5Bfoo2%5D=bar2
CGI :: param在包主线30的列表上下文中调用,这可能会导致漏洞。请参阅"获取单个命名参数的值中的警告
我似乎所有数组元素都被硬编码到参数中,例如&f; [foo1]'。
是否可以获得动态访问权限?
的输出
foo
$cgi->param('foo[]')
答案 0 :(得分:1)
您必须以json string
发送数据 'data' : JSON.stringify({
'foo': {
'foo1':'bar1',
'foo2':'bar2'
}
}),
并在服务器端将字符串转换为本机perl结构,
use JSON;
my $data = decode_json( $cgi->param('keywords') );
答案 1 :(得分:0)
我想你想要这样的东西。首先是发送数据的jquery。
<!DOCTYPE html>
<html>
<head>
<title>Testing ajax</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$("#test").click(function(){
$.ajax({
type: 'POST',
url: 'ajax1.cgi',
data: {'foo': {
'foo1':'bar1',
'foo2':'bar2'
}
},
success: function(res) {
$( ".demo" ).append("your first var is: " + res.foo1+"<br />");
$( ".demo" ).append("your second var is :"+res.foo2);
},
error: function() {alert("did not work");}
});
})
})
</script>
</head>
<body>
<button id="test" >Testing</button>
<div class="demo" >
</div>
</body>
cgi脚本是ajax1.cgi。请注意,响应以json格式发送。
#!/usr/bin/perl
use strict;
use warnings;
use JSON; #if not already installed, just run "cpan JSON"
use CGI;
use Data::Dumper;
my $cgi = CGI->new;
print $cgi->header('application/json;charset=UTF-8');
#my $id = $cgi->param('foo[]');
my @cgivars=$cgi->param; #get all key value of param in array
my $cgivar1="Not defined";
my $cgivar2="Not defined";
foreach my $a(@cgivars){
if($cgi->param($a) eq 'bar1'){
$cgivar1="bar1"; #means do whatever you like to do here
}
else{
$cgivar2="bar2"; #same here etc
}
}
#print Dumper scalar $cgi->Vars();
#convert data to JSON
my $op = JSON -> new -> utf8 -> pretty(1);
my $json = $op -> encode({
foo1=>$cgivar1,
foo2=>$cgivar2
});
print $json;
答案 2 :(得分:0)
我正在寻找一种perl-own方法将json“数组”转换回真实数组或哈希。
所以我自己做了:
my $cgi = CGI->new();
my %hash = ();
foreach my $a ($cgi->param())
{
if($a =~ /^([\w\-]+)\[(.*)\]/) #TODO multidimensional
{
$hash{$1}{$2} = $cgi->param($a);
}
else
{
$hash{$a} = $cgi->param($a);
}
}