2011-06-17 49 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); 
}