success
jQuery में सफलता कॉलबैक का पारंपरिक नाम रहा है, जिसे अजाक्स कॉल में एक विकल्प के रूप में परिभाषित किया गया है। हालांकि, $.Deferreds
के कार्यान्वयन के बाद और अधिक परिष्कृत कॉलबैक, done
सफलता कॉलबैक को लागू करने का पसंदीदा तरीका है, क्योंकि इसे किसी भी deferred
पर कॉल किया जा सकता है।
उदाहरण के लिए, सफलता:
$.ajax({
url: '/',
success: function(data) {}
});
उदाहरण के लिए, किया:
$.ajax({url: '/'}).done(function(data) {});
अच्छी बात के बारे में done
कि $.ajax
के रिटर्न मान अब एक आस्थगित वादा है कि करने के लिए बाध्य किया जा सकता है है आपके आवेदन में कहीं और। तो मान लीजिए कि आप इस अजाक्स कॉल को कुछ अलग स्थानों से बनाना चाहते हैं। फ़ंक्शन के विकल्प के रूप में आपके सफलता फ़ंक्शन में गुजरने के बजाय, यह अजाक्स कॉल बनाता है, आप केवल $.ajax
फ़ंक्शन वापस कर सकते हैं और done
, fail
, then
, या जो भी हो, के साथ अपने कॉलबैक को बाध्य कर सकते हैं। ध्यान दें कि always
एक कॉलबैक है जो यह चलाएगा कि अनुरोध सफल हुआ या विफल हो गया है या नहीं। done
केवल सफलता पर ट्रिगर किया जाएगा।
उदाहरण के लिए:
function xhr_get(url) {
return $.ajax({
url: url,
type: 'get',
dataType: 'json',
beforeSend: showLoadingImgFn
})
.always(function() {
// remove loading image maybe
})
.fail(function() {
// handle request failures
});
}
xhr_get('/index').done(function(data) {
// do stuff with index data
});
xhr_get('/id').done(function(data) {
// do stuff with id data
});
रख-रखाव के मामले में इस बात का महत्वपूर्ण लाभ यह है कि आप एक आवेदन विशेष समारोह में अपने ajax तंत्र लपेटा गया है। यदि आप तय करते हैं कि भविष्य में अलग-अलग काम करने के लिए आपको $.ajax
कॉल की आवश्यकता है, या आप एक अलग AJAX विधि का उपयोग करते हैं, या आप jQuery से दूर जाते हैं, तो आपको केवल xhr_get
परिभाषा को बदलना होगा (एक वादा वापस करना सुनिश्चित करें या कम से कम done
उपरोक्त उदाहरण के मामले में विधि)। पूरे ऐप में अन्य सभी संदर्भ समान रह सकते हैं।
वहाँ कई और अधिक (बहुत कूलर) चीजें आप $.Deferred
साथ कर सकते हैं, जिनमें से एक भी जब $.ajax
अनुरोध ही सफल होता है, pipe
उपयोग करने के लिए सर्वर द्वारा रिपोर्ट एक त्रुटि पर एक विफलता को गति प्रदान करने के लिए है रहे हैं।उदाहरण के लिए:
function xhr_get(url) {
return $.ajax({
url: url,
type: 'get',
dataType: 'json'
})
.pipe(function(data) {
return data.responseCode != 200 ?
$.Deferred().reject(data) :
data;
})
.fail(function(data) {
if (data.responseCode)
console.log(data.responseCode);
});
}
xhr_get('/index').done(function(data) {
// will not run if json returned from ajax has responseCode other than 200
});
पढ़ें $.Deferred
के बारे में अधिक यहाँ: http://api.jquery.com/category/deferred-object/
नोट: jQuery 1.8 के रूप में, pipe
बिल्कुल उसी तरह then
का उपयोग कर के पक्ष में पदावनत किया गया है।
मुझे आश्चर्य है कि 'सफलता:' /'.done() 'की इंटरैक्शन कैसे परिभाषित की जाती है। जैसे 'सफलता है:' इन दिनों पहले '.done()' के रूप में लागू किया गया था? –
आपका मतलब है कि अगर आपके पास अजाक्स कॉल पर 'सफलता:' और '.done' दोनों हैं? अच्छा प्रश्न। चूंकि अन्य सभी कॉलबैक को क्रम में बुलाया जाता है कि वे बाध्य हैं, मेरा अनुमान हां है, 'सफलता' को केवल पहले कहा जाता है। – glortho
हां, यह वास्तव में मामला प्रतीत होता है: http://jsfiddle.net/9L7dD/ – Adam