无法读取perl中的JSON数据

时间:2013-09-23 10:27:20

标签: jquery ajax json perl

我正在尝试使用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";

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

您的JS端代码不会POST查询参数dataString,但POST会在请求正文中进行序列化。你应该改变Perl或JS方面以同意他们想要这个数据的位置(即在体内或两者都在命名参数中)。

答案 1 :(得分:0)

$.ajax({
    type: 'POST',
    url: 'cgi-bin/test3.pl',
    data: { dataStr: dataString},
    success: function(){
            alert("data");

  },

PERL:

#!/usr/bin/perl -w
...
my $cgi = CGI->new;
my $ddata = decode_json($cgi->param('dataStr'));
....