当我这样做时
$.each(result, function(i, n){
alert("key: " + i + ", Value: " + n );
});
然后每次迭代我都会看到
key: 276, Value: {"owners":["he"],"users":["he","m"],"end":"07/06-2011","groups":[],"type":"in"}
如何为每次迭代访问owners
,users
,end
,groups
和type
的值?
我会在Perl中完成
foreach my $key (keys %result) {
print $result{$key}{owners};
print $result{$key}{users};
...
}
更新
我从JSON那里得到result
$.ajax({
type: "GET",
url: "/cgi-bin/ajax.pl",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: { "cwis" : id },
// ...
success: function(result){
if (result.error) {
alert('result.error: ' + result.error);
} else {
$.each(result, function(i, n){
alert( "key: " + i + ", Value: " + n );
});
}
}
});
更新2
它认为问题是服务器端没有发送探测器JSON。
这是生成JSON字符串的服务器端脚本。
!/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 $json_string = qq{{"error" : "The user do not have any activities."}};
my $json = JSON->new->allow_nonref;
$json = $json->utf8;
# @a and $act is now available
my $data;
foreach my $id (@a) {
$data->{$id} = $json->encode(\%{$act->{$id}});
}
$json_string = to_json($data);
print $cgi->header(-type => "application/json", -charset => "utf-8");
print $json_string;
答案 0 :(得分:2)
在$.each
回调中,this
指向当前元素,因此
$.each(result, function(i, n){
alert(this.users);
});
答案 1 :(得分:2)
document.write(result[key].owners);
document.write(result[key].users);
更新:
显然,我对这个问题的评论是答案:
我不是CGI专家,但它看起来像 您将数据双重编码为 JSON。一旦用
my $json = JSON->new->allow_nonref; $json = $json->utf8;
然后再次
$ data-> {$ id} = $ json-> encode(\%{$ act-> {$ id}})。
答案 2 :(得分:1)
n.owners or n['owners']
n.users or n['users']
etc.
循环......
$.each(result, function(k,v) {
console.log("key: " + k + ", value: " + v );
$.each(v, function(k,v)) {
console.log("key: " + k + ", value: " + v );
});
});
答案 3 :(得分:1)
您可以像这样访问它们:
n.owners
或
n['owners']
或者你可以使用另一个循环:
$.each(result, function(i, n){
if (typeof(n)=='object') {
$.each(n, function(k, v){
alert('n.'+k+' = ' + v);
});
}
});
修改强> jsFiddle Example Example 2
edit2:,以避免让undefined
进行简单的检查,以确定密钥i
是否等于"Value"
,因此它的值将是一个对象