Цикл по массиву responseText JSON с использованием ключей с Javascript - PullRequest
1 голос
/ 13 ноября 2010

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

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

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

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

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

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>

Ответы [ 3 ]

1 голос
/ 13 ноября 2010

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

for(var key in responseText) {

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

for(var key in data) {

1007 * при условии *

 var data = JSON.decode(responseText);

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

onRequest: function(){

должно быть:

onRequest: function(responseText){
0 голосов
/ 13 ноября 2010

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

var data = JSON.parse(responseText);

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

url:'getinfo.php',  // Closed the quote
0 голосов
/ 13 ноября 2010

Мне кажется, проблема в том, что вы используете неправильное имя переменной.

var data = JSON.decode(responseText);

for(var key in responseText) {

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

var data = JSON.decode(responseText);

for(var key in data) {

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

...