2012-04-07 28 views
9

मैं खो गया हूं। मैं एक लूप वैरिएबल को AJAX .done() कॉल में कैसे पास कर सकता हूं?

for (var i in obj) { 
    $.ajax(/script/).done(function(data){ console.log(data); }); 
} 

जाहिर है, अगर मैं console.log(i+' '+data)मैं करने के लिए हर एक यात्रा पर वस्तु obj में आखिरी कुंजी वापसी होगी थे। दस्तावेज़ीकरण मुझे विफल करता है।

+0

मुझे लगता है मैं 'success' इस्तेमाल कर सकते हैं समझ, लेकिन जैसा कि मैं समझता हूँ कि अब मान्य नहीं है। – philtune

उत्तर

9

आप एक बंद (एक स्वयं को क्रियान्वित समारोह के माध्यम से) का उपयोग कर सकते इस तरह पाश से प्रत्येक मंगलाचरण के लिए i का मूल्य कब्जा करने के लिए:

for (var i in obj) { 
    (function(index) { 
     // you can use the variable "index" here instead of i 
     $.ajax(/script/).done(function(data){ console.log(data); }); 
    })(i); 
} 
+0

क्लोजर एक अवधारणा है जिसे मुझे हमेशा समझने में कठिन समय होता है। धन्यवाद @ jfriend00, मैं कोशिश कर रहा हूँ! – philtune

+0

हाँ, यह काम किया। मैं 'ओबीजे [इंडेक्स]' भी कर सकता था। एक बार फिर धन्यवाद! – philtune

5

तुम बस वस्तु में एक कस्टम फ़ील्ड बना सकते हैं कि आप $ .ajax() को भेजें, और वादा कॉलबैक होने पर यह "इस" में एक क्षेत्र होगा।

उदाहरण के लिए:

$.ajax( { url: " https://localhost/whatever.php ", method: "POST", data: JSON.stringify(object), custom: i // creating a custom field named "custom" }).done(function(data, textStatus, jqXHR) { var index = this.custom; });

+0

5 वर्षों के बाद, मुझे यह भूल गया है कि इस प्रश्न को भी किस तरह से प्रेरित किया गया है। ;) – philtune

+0

मुझे यह जानने की जरूरत है कि हालिया परियोजना के लिए इसे कैसे किया जाए। इसलिए, जब मैंने इसे समझ लिया, तो मैंने उन लोगों को जानकारी रिले करने की कोशिश की जिन्होंने कहा कि वे चाहते थे ... –

+0

यह jquery AJAX एसिंक्रोनस निष्पादन बिंदु से बेहतर है, यह कॉलबैक होने पर स्पष्ट रूप से इच्छित आइटम/ऑब्जेक्ट संदर्भ प्रदान करता है बाद में निष्पादित किया गया। –

संबंधित मुद्दे