【问题标题】:Not able to read JSON data in perl无法在 perl 中读取 JSON 数据
【发布时间】: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 了解更多信息。您应该使用占位符来帮助您清理数据。

标签: jquery ajax json perl


【解决方案1】:

您的 JS 端代码不会 POST 查询参数 dataString,但 POST 会在请求正文中进行序列化。您应该更改 Perl 或 JS 端以同意他们希望此数据在哪里(即在正文中或在命名参数中)。

【讨论】:

    【解决方案2】:
    $.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'));
    ....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-27
      • 2018-12-24
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多