jQuery - получить данные JJSON в массив - PullRequest
1 голос
/ 09 августа 2010

Как вы сохраняете данные, полученные из jQuery getJSON, в массив для последующего использования?

Вот пример кода - каким-то образом цикл data не сохраняется в глобальном haikus.


$(document).ready(function(){
    var haikus=[];
    alert("begin loop");
    $.getJSON('http://haikuennui.com/random.php',function(data){
         var i=0;
         for(i=0;i<data.length;i++){
            haikus[i]=[data[i].id,String(data[i].username),String(data[i].haiku)];
        }
            alert(haikus[0][1]);
    });
})
​

http://jsfiddle.net/DMU2v/

Ответы [ 3 ]

2 голосов
/ 09 августа 2010
1 голос
/ 09 августа 2010

Если я правильно понимаю ваш вопрос, вы хотите кэшировать несколько AJAX-полученных элементов?

Итак, если все элементы выглядят так, скажем:

{ id: 1, value: 'Test' }

... и вы не хотите AJAX-извлекать значение для ID = 1, если вы уже сделали это один раз ...?

В этом случае объявите переменную кэша где-нибудь в глобальной области видимости:

var ajaxCache = {};

В случае успеха вашей функции извлечения, добавьте к ней:

ajaxCache['item' + item.id] = item;

Когда вы это сделаете, вы можете изменить свою функцию извлечения следующим образом:

if(('item' + id) in ajaxCache) {
    return ajaxCache['item' + id];
}

// continue to fetch 'id' as it didn't exist

Следует отметить, что на самом деле это не массив. Причина, по которой я не использовал массив, заключается в том, что назначение элемента с идентификатором 2000 даст массиву длину 2001 года, а не просто добавит к нему свойство. Таким образом, независимо от того, как вы подходите к этому, итерация от 0 до array.length никогда не будет хорошим способом получения всех элементов (что является единственным сценарием, в котором разница между массивом и объектом будет иметь значение, в данном конкретном контексте).

Вместо этого для итерации этого объекта вам нужно написать

for(var key in ajaxCache) {
   var item = ajaxCache[key];

   // whatever you want to do with 'item'
}

Да, и для удаления объекта:

delete ajaxCache['item' + id];
0 голосов
/ 09 августа 2010

просто убедитесь, что полученный вами JSON является массивом. Сохраните этот массив JSON в массив и используйте, когда захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...