gpt4 book ai didi

jquery - 这是如何在 JSON 中使用哈希值吗?

转载 作者:行者123 更新时间:2023-11-30 23:58:17 25 4
gpt4 key购买 nike

我正在制作一个网页,其中有两个表单(用户和所有者),可以在每个表单中键入逗号分隔的名称,然后单击“提交”。

我之前尝试过仅将 JSON 与字符串一起使用,而不使用 Perl 模块。现在我需要以用户名,全名owner_name,全名的形式传输许多用户的信息。在 Perl 中,我将其作为两个哈希值。

这是一个由两部分组成的问题。

服务器端

这是我的 Perl 脚本。

#!/usr/bin/perl -T

use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:standard);
use JSON;
use utf8;
use strict;
use warnings;

my $cgi = CGI->new;
$cgi->charset('UTF-8');

my @owners = map { s/\s*//g; $_ } split ",", $cgi->param('owner');
my @users = map { s/\s*//g; $_ } split ",", $cgi->param('users');

# ...

my %user_result = ();
foreach my $u (@users) {
$user_result{$u} = $db1->{$u}{displayName};
}

my %owner_result = ();
foreach my $o (@owners) {
$owner_result{$o} = $db2{$o}{ad_displayname};
}

my $json->{"users"} = \%user_result;
my $json->{"owners"} = \%owner_result;

my $json_string = to_json($json);

print $cgi->header(-type => "application/json", -charset => "utf-8");
print $json_string;

这是将两个哈希值转换为 JSON 字符串的正确方法吗?

客户端

$(document).ready(function(){
$('form').live('submit', function(){
$.ajax({
type: "GET",
url: "/cgi-bin/ajax.pl",
contentType: "application/json; charset=utf-8",
dataType: "json",

data: $(this).serialize(),

error: function(XMLHttpRequest, textStatus, errorThrown) {
$('div#create_result').text("responseText: " + XMLHttpRequest.responseText +
", textStatus: " + textStatus +
", errorThrown: " + errorThrown);
$('div#create_result').addClass("error");
},

success: function(result){
if (result.error) {
$('div#create_result').text("result.error: " + result.error);
$('div#create_result').addClass("error");
} else { // perl script says everything is okay

// how do I access my two hashes here?
// {"users": [username1, fullname1, ...], "owners": [owner name1, full name 1, ...]}

var users = result.users; // array
var owners = result.owners; // array
alert(users);
alert(owners);

}
}
});
});
});

这是发送和接收 JSON 的正确方法吗?

之后我如何访问数据?

更新使用 Matt Ball 和 davorg 的答案更新了代码,并添加了 alert(users)

现在的错误是 json 对象未定义。

my $json->{"users"}  = \%user_result;
my $json->{"owners"} = \%owner_result;

我如何定义这样的?

最佳答案

您正在尝试打印两个 CGI header block 。不幸的是,每个响应只能有一个关联的 CGI block 。而且,不幸的是,您打印的第一个 header block 的内容类型 header 错误(它是“text/html”,您实际上想要“application/json”)。

如果删除“print "Content-Type: ..."”行,事情应该会好一点。

然后在第二个 header block 中,您尝试调用一个名为“header”的未知函数。这实际上是 $cgi 对象上的一个方法,因此需要将其调用为 $cgi->header(...)。

这些修复实际上应该成功地将一些 JSON 返回到您的客户端代码。不过,我还提出了一些其他建议。

1/“split”函数的第一个参数应该是正则表达式,而不是字符串。

2/您正在构建的 JSON 数据结构似乎不必要地复杂。对于两个部分(用户和所有者)中的每一个,您都有一个元素数组,其中包含对哈希的引用。当然,数组可以省略,因此每个元素只直接包含哈希引用。

关于jquery - 这是如何在 JSON 中使用哈希值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6018269/

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