2010-11-13 3 views
1

Использование Javascript. Я пытаюсь перебрать массив, закодированный с помощью JSON. Вот пример массива:Петля через массив ответов JSON с использованием ключей с Javascript

{"test1":"some info","test2":"more info","test3":"more stuff"} 

Внутри каждого цикла я проверяю, чтобы увидеть, если DIV идентификатор существует с именем ключей.

<div id="test1"></div> 
<div id="test2"></div> 
<div id="test3"></div> 

Я использую цикл for(), но я не могу заставить его работать. Если я удалю цикл for(), он отлично работает, если я ищу только один идентификатор DIV.

for(var key in responseText) 

Вот сценарий. Кто-нибудь знает, как я могу перебирать массив из responseText, используя ключи массива, как имена идентификаторов DIV?

<script> 
function loadInfo(){ 
var req = new Request({ 
    method:'get', 
    url:'getinfo.php, 
    noCache: true, 
    onRequest: function(){ 

     for(var key in responseText) { 

      if (document.getElementById(key)) { 

       $(key).set('html', 'Loading'); 

      } 

     } 

    }, 
    onComplete:function(responseText, responseHtml){ 
     if (JSON.decode(responseText) != null){ 
      var data = JSON.decode(responseText); 

      for(var key in responseText) { 

       if (document.getElementById(key)) { 

        $(key).set('html', data[key]); 

       } 

      } 
     } 
    }, 
    onFailure: function(){ 

     for(var key in responseText) { 

      if (document.getElementById(key)) { 

           $(key).set('html', '-'); 
          } 

     } 

    }   
}).send(); 
} 
window.addEvent('domready', function(){ 
loadInfo(); 
}); 
</script> 

ответ

1

Вы должны декодировать JSON, прежде чем перебирать ключи. Итак, где вы говорите:

for(var key in responseText) { 

заменить это:

for(var key in data) { 

предполагающей

var data = JSON.decode(responseText); 

Кроме того, некоторые из функций обратного вызова не указать responseText в качестве параметра. Если вы хотите получить к нему доступ для каждого обратного вызова, вы должны явно указать responseText в качестве параметра. Пример:

onRequest: function(){ 

должно быть:

onRequest: function(responseText){ 
0

Я думаю, что проблема в том, что вы используете имя переменной неправильно.

var data = JSON.decode(responseText); 

for(var key in responseText) { 

Следует читать

var data = JSON.decode(responseText); 

for(var key in data) { 

Обратите внимание, что вместо responseText после in, он читает data.

0

Вы уверены, что не хотите JSON.parse? Это разобрало бы ответ JSON в объект javascript, который вы можете использовать против for/in.

var data = JSON.parse(responseText); 

Кроме того, вы пропустили знак закрывающей кавычки после url:

url:'getinfo.php', // Closed the quote 
+0

Спасибо за указание на закрывающей кавычки. На самом деле это не пропало в моем живом сценарии. – Mark

Смежные вопросы