2011-06-23 6 views
1

私は反復ごとに、その後javascriptでオブジェクトのコンテンツにアクセスするには?

$.each(result, function(i, n){ 
alert("key: " + i + ", Value: " + n); 
}); 

を行うと私は反復ごとにownersusersendgroups、およびtypeの値にアクセスするにはどうすればよい

key: 276, Value: {"owners":["he"],"users":["he","m"],"end":"07/06-2011","groups":[],"type":"in"} 

を参照してください? Perlで

私は更新

foreach my $key (keys %result) { 
    print $result{$key}{owners}; 
    print $result{$key}{users}; 
    ... 
} 

を行っているだろう、私はそう

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

     }); 


    } 
    } 
}); 

のようなJSONからresultを入手アップデート2

問題はサーバ側がプローバJSONを送信していないということです。

これは、JSON文字列を生成するサーバーサイドスクリプトです。現在の要素に

$.eachコールバック、this点で
!/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

なりますので、キーiは、"Value"に等しいかどうかを簡単なチェックを行いundefinedを避けるためには、あなたはまた、perlスクリプトが生成する結果を表示することができますか? – Teneff

+1

私はCGIのエキスパートですが、データをJSONに二重にエンコードしているようです。 'my $ json = JSON-> new-> allow_nonrefで一度; $ json-> encod(\%{$ act - > {$ id}}) 'を使って、$ json = $ json-> utf8;私はそれまでこれをやろうとしているとは言えません! – T9b

+0

@ T9b:あなたはまさに正しいです!それは問題だった=)あなたが投稿した場合は解決策として、私はそれを受け入れる=)ありがとう=) –

答えて

2
document.write(result[key].owners); 
document.write(result[key].users); 

UPDATE:

どうやら質問に私のコメントが答えた:

私はCGIの専門家だが、あなたは JSONにデータを二重エンコードされている ように見えます。一度

my $json = JSON->new->allow_nonref; $json = $json->utf8; 

した後で再び有する

$データ - > {$のID} = $ json->(\%{ - > {$番号} $行為を})をコードします。

+0

ここでも私は 'undefined'を取得します。 –

+0

JSONを値に作成しようとしていますか?正しく構成され、正しく解析されていますか?手動で生成しているのですか、一部のフィードから受信していますか? – T9b

+0

'result'はJSONから来ているので、JSONをデコードしたデータにアクセスしようとしています。 1分後にAjaxコールで質問を更新します。 –

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); 
    }); 
}); 
+0

どちらの場合も 'undefined'と表示されます。 –

2

ので

$.each(result, function(i, n){ 
    alert(this.users); 
}); 
+0

私はそれをしようとすると 'undefined'となってしまいます。 –

+0

@stereofrog:私の場合、データは異なって見えます。値の中のすべてが '{}'のただ1つの集合で閉じられていることに注目してください。違いがあれば、データはJSONから来ますか? –

+0

@Sandra 'n'が' integer'のときに最初の反復で 'undefined'となっていると思います。 – Teneff

1

あなたは、このようにそれらにアクセスすることができます。

n.owners 

または

n['owners'] 

か、別のサイクルを使用することができます

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

が編集:Example 2

EDIT2:が、それは価値がオブジェクト

+0

これは非常に興味深いです。 jsFiddleから自分のコードを自分のデータに使うと '私はオブジェクトではありません。 'というメッセージが表示されます。 –

+0

@Sandraちょうど ''は... "' ...キー名なし? – Teneff

+0

私のデータに例2のコードを使用すると、常に 'else'条件が入ります。 –

関連する問題