2011-06-17 8 views
5

बस अगर कोई मुझे समझा सकता है कि क्यों अलर्टबॉक्स एक सरणी वापस नहीं करता है लेकिन खाली ??jQuery के साथ एक बहुआयामी सरणी में कैसे foreach? अजीब व्यवहार

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

वास्तव में, मैं एक वेब सेवा से सरणी इस तरह का होगा और मैं datas को पुनः प्राप्त करने के लिए इस सरणी में पाश की जरूरत है।

लेकिन मुझे समझ में नहीं आता कि लूप ठीक से क्यों काम नहीं करता है।

अग्रिम लोगों में धन्यवाद।

उत्तर

1

आपको जावास्क्रिप्ट में इस तरह के सरणी का उपयोग नहीं करना चाहिए। Arrays संख्यात्मक रूप से अनुक्रमित हैं। आप

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

वास्तव में, मैं इस सेवा का उपयोग करना चाहते हैं पेज, जावास्क्रिप्ट समारोह कोड नमूना कहते हैं: // यहां अपना कोड डालें // जानकारी के लिए: // ईद : उत्पादन कुंजी मान युग्म की एक सरणी (जैसे प्रतिक्रिया [0] .id), कुंजी किया जा रहा है // StreetAddress // प्लेस तो मैं बस अपनी स्क्रिप्ट को लागू करने के लिए एक उदाहरण सरणी बनाने की कोशिश कर रहा हूं। लेकिन मेरी सरणी गलत लगती है। अगर कोई मुझे मेरी सरणी का सही वाक्यविन्यास दे सकता है। धन्यवाद –

+0

@ एंटोनी मैंने जवाब संशोधित किया –

8

एक बहुआयामी सरणी नहीं है यही कारण है, लेकिन गलत कोड। Arrays और Objects (हैश) अलग-अलग चीजें हैं जैसे 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 प्रारूप का उपयोग क्यों नहीं करते? 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); 
} 
संबंधित मुद्दे