2011-06-17 46 views
5

只要有人能解釋我爲什麼alertbox不會返回一個數組而是空?如何使用jQuery插入多維數組?奇怪的行爲

var response = new Array(); 
response[0] = new Array(); 
response[1] = new Array(); 
response[2] = new Array(); 

response[0]["Id"] = 1; 
response[0]["StreetAddress"] = 'xxx'; 
response[0]["Place"] = 'yyy'; 

response[1]["Id"] = 2; 
response[1]["StreetAddress"] = 'xxx'; 
response[1]["Place"] = 'yyy'; 

response[2]["Id"] = 3; 
response[2]["StreetAddress"] = 'xxx'; 
response[2]["Place"] = 'yyy'; 

$.each(response , function(key1, value1) { 
    alert(value1); 
}); 

實際上,我會從web服務這樣的數組,我需要循環到這個數組來檢索數據。

但我不明白爲什麼循環無法正常工作。

非常感謝你們。

回答

1

你不應該在Javascript中使用這樣的數組。數組被數字化索引。如果你寫

response[1]["Id"] = 2; 

要添加屬性來響應[1]數組

編輯 - 我讀好一點的COMENT。它指出:

//供參考:輸出是關鍵 值對陣列(例如響應[0] .ID),則 鍵爲:

所以,你必須的陣列對象。

這將映射您將收到的數據。

var response = new Array; 
response[0] = new Object(); 
response[1] = new Object(); 
response[2] = new Object(); 

response[0]["Id"] = 1; 
response[0]["StreetAddress"] = 'xxx'; 
response[0]["Place"] = 'yyy'; 

response[1]["Id"] = 2; 
response[1]["StreetAddress"] = 'xxx'; 
response[1]["Place"] = 'yyy'; 

response[2]["Id"] = 3; 
response[2]["StreetAddress"] = 'xxx'; 
response[2]["Place"] = 'yyy'; 

,你可以像這樣訪問他們:

jQuery.each(response, function(key, value){ 
     for (key2 in value[key]){ 
      if (value[key].hasOwnProperty(key2)){ 
      alert(mine[key2]) 
      } 
     } 
    }); 
+0

其實,我想利用這個服務: http://www.postcodeanywhere.co.uk/support/webservices/PostcodeAnywhere/Interactive/FindByPostcode/v1/default.aspx 上的頂部頁面中,javascript函數代碼示例如下所示: //將代碼放在此處 // FYI:輸出是一組鍵值對(例如響應[0] .Id),其中的鍵爲: // Id //街道地址 //放置 所以我只是想創建一個示例數組來開始實現我的腳本。但我的陣列似乎是錯誤的。如果有人能給我我陣列的正確語法。謝謝 – 2011-06-17 13:46:42

8

這不是一個多維數組,但無效代碼。 ArraysObjects(哈希)是不同的東西,不像PHP那樣。

所以在頂部,你應該寫:

var response = new Array(); 
response[0] = new Object(); 
response[1] = {}; // it's the same 
response[2] = new Object(); 

而且像你一樣,你可以遍歷它:

$.each(response , function(index, obj) { 
    $.each(obj, function(key, value) { 
     console.log(key); 
     console.log(value); 
    }); 
}); 
5

,如果你嘗試:執行console.log(響應)..你會看到這個數組是空的,看起來數組的格式不正確。

爲什麼不使用JSON格式呢?

var response = [{ 
    "Id":"1", 
    "StreetAddress": "xxx", 
    "Place":"yyy" 
}, 
{ 
    "Id":"2", 
    "StreetAddress": "xxx2", 
    "Place":"yyy2" 
}, 
{ 
    "Id":"3", 
    "StreetAddress": "xxx3", 
    "Place":"yyy3" 
} 
] 
console.log(response); 
//you'll get an object: [Object { Id="1", StreetAddress="xxx", Place="yyy"}, Object { Id="2", StreetAddress="xxx2", Place="yyy2"}, Object { Id="3", StreetAddress="xxx3", Place="yyy3"}] 
//iterate over 
for(var x=0; x < response.length; x++){ 
    console.log("ID: " + response[x].Id + " StreetAddress: " + response[x].StreetAddress + " Place: " + response[x].Place); 
}