【发布时间】:2023-03-05 07:29:01
【问题描述】:
我正在尝试使用 Ajax 和 Jquery 将 JSON 数据传递给 Perl 脚本。在 Perl 脚本中,试图读回数据。但我无法读取 Perl 中的数据。
请有人帮助我,有什么问题/遗漏。下面给出了 HTML 和 PERL 的代码。 Ajax 既不调用打印成功警报也不调用错误警报。
这是 HTML 文件
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" </script>
<script src="json.js" </script>
<script>
$(document).ready(function(){
$("#get").click(function(){
var data = {
"name": "Bob",
"sex": "Male",
"address": {
"city": "San Jose",
"state": "California"
},
"friends":
[
{
"name": "Alice",
"age": "20"
},
{
"name": "Laura",
"age": "23"
},
{
"name": "Daniel",
"age": "30"
}
]
};
alert (data);
var dataString = JSON.stringify(data, null, 2);
alert (dataString);
$.ajax({
type: 'POST',
url: 'cgi-bin/test3.pl',
data: dataString,
success: function(){
alert("data");
},
error: function()
{
alert ("something wrong");
}
});
});
});
</script>
</head>
<body>
<button id="get">save</button>
</body>
</html>
** 这是我的 perl 文件 **
#!/usr/bin/perl -w
use strict;
use warnings;
use CGI;
use CGI qw(:standard);
use DBI;
use JSON;
#print "Content-Type: text/html\n\n";
my $cgi = CGI->new;
my $ddata = decode_json($cgi->param('dataString'));
my $value = $ddata->{'address'}{'city'} ;
my $dbh = DBI->connect('dbi:mysql:test','root','') or die "Connection Error: $DBI::errstr\n";
my $sql = "insert into samples values (NULL, '$value')";
my $sth = $dbh->prepare($sql);
$sth->execute or die "SQL Error: $DBI::errstr\n";
我们将不胜感激。
【问题讨论】:
-
您传递的是字符串,而不是数据结构。您的 CGI 脚本不返回任何响应。尝试解决这两个问题。
-
你的意思是说我不需要在 HTML 文件中使用 JSON.stringify(...)
-
获取 Firebug for Firefox,检查您的 ajax url/requests/responses。如果没有响应,请检查您的网络服务器日志。
-
除了此处的任何其他答案之外,您的行:
perl my $sql = "insert into samples values (NULL, '$value')";是等待发生的注入攻击。请参阅bobby-tables.com 了解更多信息。您应该使用占位符来帮助您清理数据。