2013-09-23 100 views
0

我想将使用Ajax和Jquery的JSON数据传递给Perl脚本。在Perl脚本中,试图读取数据。但我无法读取Perl中的数据。无法读取perl中的JSON数据

可以请别人帮我,是否有任何错误/缺失。 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"; 

任何帮助将得到高度赞赏。

+0

你传递一个字符串,而不是一个数据结构。你的CGI脚本没有回应。尝试解决这两个问题。 – amon

+0

你的意思是说我不需要在HTML文件中使用JSON.stringify(...) –

+0

获取Firebug for Firefox,检查你的ajax网址/请求/响应。如果没有响应,请检查您的Web服务器日志。 –

回答

0

您的JS端代码不会POST查询参数dataString,但POSTs在请求正文中具有序列化。你应该改变Perl或JS端,以便在他们想要这些数据的地方达成一致(即,在正文中或者在命名参数中)。

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')); 
....