2010-08-09 114 views
1

如何將從jQuery getJSON收到的數據存儲到數組中以備後用?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/

+1

,是什麼樣子? – 2010-08-09 08:01:30

+0

我無法引用getJSON回調之外的任何元素。我試過在回調中定義一個array = data [i](for循環,i),但數組讀取undefined之外的回調 – ina 2010-08-09 08:03:50

+0

添加了一個片段 – ina 2010-08-09 08:21:04

回答

1

如果我正確理解你的問題,你想緩存一些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 

應該指出,這實際上不是一個數組。我沒有使用數組的原因是,使用ID 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

(添加片段 - 見上面) – ina 2010-08-09 08:29:02

+0

@ina:好吧,那看起來好像我對你正在嘗試的假設要做的是正確的。改變你的代碼,使它利用我所描述的,應該解決你的問題。 – 2010-08-09 08:33:18

+0

而不是使用關聯數組,爲什麼不循環通過增量式填充數組的json數據..這正是我在我的代碼片段中所要做的,但儘管我可以在getJSON函數回調中的循環內檢索數據,但不能通過外部存儲的數組獲取數據。 – ina 2010-08-09 17:14:45

0

只是確保您收到的JSON是一個數組。將此JSON數組存儲到數組中並隨時使用。

+0

你如何確保收到的JSON是一個數組? – ina 2010-08-09 08:21:21

+0

http://stackoverflow.com/questions/951483/how-to-check-if-a-json-response-element-is-an-array – Adirael 2010-08-09 08:44:39

+0

示例數組'var arr =「[1,2,3,4 ,5]「' – 2010-08-09 09:28:16