Как получить доступ к содержимому объекта в JavaScript? - PullRequest
1 голос
/ 23 июня 2011

Когда я делаю

$.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};
   ...
}

Обновление

Я получу resultиз JSON вот так

$.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;

Ответы [ 4 ]

2 голосов
/ 23 июня 2011

in $.each callbacks, this указывает на текущий элемент, поэтому

$.each(result, function(i, n){
     alert(this.users);
});
2 голосов
/ 23 июня 2011
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}}).

1 голос
/ 23 июня 2011

вы можете получить к ним доступ следующим образом:

n.owners

или

n['owners']

или вы можете использовать другой цикл:

$.each(result, function(i, n){
    if (typeof(n)=='object') {
        $.each(n, function(k, v){
            alert('n.'+k+' = ' + v);
        });
    }
});

edit: jsFiddle Пример Пример 2

edit2: , чтобы избежать получения undefined, просто проверьте, является ли ключ iравен "Value", поэтому его значением будет объект

1 голос
/ 23 июня 2011
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 );
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...