gpt4 book ai didi

jquery - 如何在 Perl 中访问通过 Ajax jquery 传递的数组

转载 作者:行者123 更新时间:2023-12-01 05:53:19 25 4
gpt4 key购买 nike

我使用 jquery ajax 和给定的数组从 HTML 调用 Perl 脚本。

var items = [
{ "itemname": "item1", "mrpprice": 1999, "sellprice" : 21.50, "quantity": 2},
{ "itemname": "item2", "mrpprice": 1999, "sellprice" : 22.50, "quantity": 1}
];

$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
dataType: "json",
url: "/cgi-bin/submit_order.pl", // URL of the Perl script
data: { itemsArray : items },
success: function(data)
{ alert ("success")}
});

并像这样读取 Perl 文件中的 CGI 参数。

my @values = $cgi->param('items[]');

但无法访问 Perl 文件中的值。我使用以下语法进行访问。

print $values[0]{'quantity'};

任何人都可以帮忙解决这个问题,以及正确的访问方式是什么。任何帮助将不胜感激。

最佳答案

这里可能存在一些问题。

type: "GET"

如果要在请求正文中发送数据,则需要使用 POST。即使您试图在此处使用查询字符串,也不要这样做。这样一来,就没有什么收获了。在这种情况下,POST 更加整洁。

接下来,这不是一个表单,你传递的也不是表单数据。这:

dataType: "json",
data: { itemsArray : items }

创建 json 格式的普通序列化数组。它没有任何与之关联的标签(“itemsArray”或“items”)——这是您在客户端上序列化的数据。这一切都很好,这正是您想要的(再次强调,它不是表单编码,而是 json)。它看起来像 [{ "itemname": "item1", "mrpprice": 1999, "sellprice": 21.50, "quantity": 2},{ "itemname": "item2", "mrpprice": 1999 ,“销售价格”:22.50,“数量”:1}]。看看你的js数组是如何序列化成字符串的?那是 json。但是“itemName”或“item”(变量上的标签)不是变量内容的一部分。您发送的只是内容。再说一遍,这就是您想要的。

我不确定 CGI 模块是否有办法处理这个问题,但我会跳过它——CGI 脚本接收 STDIN 上的输入,CGI 模块只是为您解析它。然而,它需要表单数据,但事实并非如此。但是您可以自己解析 STDIN,或者更确切地说,读取 STDIN 并获取 perl JSON 模块来为您解析它。

我确信您仍然可以使用 .cgi 脚本来执行此操作,只是您需要处理原始输入。 这意味着真正跳过 CGI 模块,否则它会窃取您的输入。所以不要使用 CGI。省略该模块。 服务器将在 STDIN 上向您传递原始帖子正文,因为该脚本已作为 CGI 可执行文件在服务器上注册 - 您根本不需要任何 perl 模块即可实现这一点。所以第一件事就是读取输入:

my $json= "";
while (<STDIN>) {
$json .= $_;
}

这将是来自 POST 正文的序列化字符串。将其转换为 perl 数组:

use JSON::XS;

my $arrayRef = decode_json($json);

该模块还有一个纯 Perl 版本。都有可用和 documented在 CPAN 上。

关于jquery - 如何在 Perl 中访问通过 Ajax jquery 传递的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18931823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com