2011-08-10 8 views
1

サーバーのリターンをこのJSON:のJavascript JSONの問題

{ 
    "comments": [ 
     { 
      "id": 99, 
      "entryId": 19, 
      "author": "Вася", 
      "body": "Комент Васи", 
      "date": "20.10.2022" 
     }, 
     { 
      "id": 100, 
      "entryId": 19, 
      "author": "n54", 
      "body": "w754", 
      "date": "21.10.2023" 
     } 
    ], 
    "admin": false 
} 

私はそれを表示するようにしようとしています:「

if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
    var json = eval("("+xmlhttp.responseText+")"); 
    for(var comment in json.comments){ 
     alert(comment["author"]); 
    } 
} 

期待通りには、サイクルが2回動作しますが、この警告は表示さ未定義"。 しかし、警告(json.admin)を実行しようとすると、計画どおりに虚偽を表示します。 私は何が間違っていますか?

+0

をevalを使用しないでください。これまでJSON.parseを使用します。ブラウザ間の互換性のためにCrockfordのjson2(https://github.com/douglascrockford/JSON-js/blob/master/json2.js)を使用することができます。 –

答えて

0

あなたは配列に内容を反復処理する必要がある場合は、配列インデックスを反復はなく、アレイ内のプロパティを反復する必要があり、

だから、配列を反復するために、次のコードスニペットを使用しますアレイのプロパティの一つが「削除」機能が含まれているので、次のコードスニペットのようなアレイのプロパティを超える行うには正しいことですが、インデックス、

for(var i = 0; i < json.comments.length; i++){ 
    alert(json.comments[i]["author"]); 
} 

反復処理は、正しい方法ではありません。

for(var i in json.comments){ 
    alert(json.comments[i]["author"]); 
} 
上記のコードで

私はは、値0、1、2を取るだろう...、機能を削除

1

あなたが配列であるコメント、

+0

ありがとうございました! – Twisty

0

1があなたのJSONでこの

if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
    var json = eval("("+xmlhttp.responseText+")"); 
    for(var i=0;i<json.comments.length;i++){ 
     alert(comment[i].author); 
    } 
} 
0

を試してみて、

for(var comment in json.comments){ 
    alert(json.comments[comment]['author']); 
} 

コメントが0すなわち配列の単なる指標で行う必要があります。番号付きのインデックスforを使用すると、これはループがよくなります。

if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
    var json = JSON.parse(xmlhttp.responseText); //See my comment on OP 
    for(var i = 0; i < json.comments.length; i++){ 
     alert(json.comments[i]["author"]); 
    } 
}