2011-06-17 21 views
5

Birisi bana uyarı kutusunun neden bir dizi döndürmediğini açıklıyorsa boş mu?jQuery ile çok boyutlu bir dizide nasıl ayrılır? Garip davranışlar

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); 
}); 

Aslında bir webcoder bu tür bir dizi olacak ve ben dataları almak için bu diziye döngü gerekir.

Ama neden döngü düzgün çalışmadığını anlamıyorum.

Şimdiden teşekkürler çocuklar.

cevap

1

Javascript'te bu gibi dizileri kullanmamalısınız. Diziler sayısal olarak endekslenir. Eğer yanıt [1] dizi

DÜZENLEME Bir mülkü ekliyoruz

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

yazarsanız - ben biraz daha iyi coment okudum. Burada:

// Bilginize:

Yani bir dizi vardır: çıkış anahtarı değer çiftleri bir dizi (örneğin, tepki [0] .id), anahtarlar ediliyor nesneler.

Bu, alacağınız verileri eşler.

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'; 

ve böyle erişebilirsiniz: çok boyutlu bir dizi değil

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

Aslında bu hizmetten yararlanmak isteyen sayfa, javaScript işlevi kod örneği söyler: // // Bilginize burada KODUNUZU PUT: // Id : çıkış anahtar değer çiftleri bir dizi (örneğin, tepki [0] .id), anahtarlar ediliyor // StreetAddress // Yer Bu yüzden sadece komut dosyamı uygulamaya başlamak için örnek bir dizi oluşturmaya çalışıyorum. Ama dizim yanlış görünüyor. Birisi bana dizimin doğru sözdizimini verebilir. Teşekkürler –

+0

@Antoine i cevabı değiştirdim –

8

ancak geçersiz kodu. Arrays ve Objects (Karma), php gibi farklı şeyler değildir.

Yani üst kısmında aşağıdaki yazmalısınız:

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

Ve yaptığımız gibi bunu tekrarlayabilirsiniz:

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

Denersen: console.log (tepki) .. dizinin boş olduğunu görürsünüz, dizinin iyi oluşmamış gibi görünüyor.

Bunun yerine JSON biçimini kullanmıyor musunuz? Üstüne üstlük http://www.postcodeanywhere.co.uk/support/webservices/PostcodeAnywhere/Interactive/FindByPostcode/v1/default.aspx :

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); 
} 
İlgili konular