की सफलता और .done() विधि के बीच क्या अंतर है क्या कोई मेरी मदद कर सकता है?
$.ajax
के success
और .done()
के बीच अंतर को समझने में सक्षम नहीं हूं।
यदि संभव हो तो कृपया उदाहरण दें।
की सफलता और .done() विधि के बीच क्या अंतर है क्या कोई मेरी मदद कर सकता है?
$.ajax
के success
और .done()
के बीच अंतर को समझने में सक्षम नहीं हूं।
यदि संभव हो तो कृपया उदाहरण दें।
संक्षेप में, AJAX फ़ंक्शन से सफलतापूर्वक कॉलबैक फ़ंक्शन को कम करने के बाद, आप बाद में अपने स्वयं के हैंडलर को संशोधित किए बिना जोड़ सकते हैं मूल कोड (पर्यवेक्षक पैटर्न)।
यहां से अधिक विस्तृत जानकारी प्राप्त करें: https://stackoverflow.com/a/14754681/1049184
और इसके नीचे उदाहरण किए गए समकक्षता => सफलता, असफल => त्रुटि और हमेशा => पूर्ण – StuartLC
यह उत्तर बिंदु को याद करता है। 'JqXHR' पर विधि के रूप में 'सफलता:' के बीच एक पैरामीटर और' .success() 'के बीच एक अंतर है। उत्तरार्द्ध को बहिष्कृत किया जा रहा है, लेकिन पूर्व ओपी क्या पूछ रहा था। – Alnitak
सफलता/त्रुटि/पूर्ण बहिष्कृत हैं और AJAX राज्य परिवर्तनों के आधार पर; किया/असफल/हमेशा jQuery Deferred राज्य परिवर्तन पर आधारित हैं। Http://api.jquery.com/category/deferred-object/ देखें। – mickeyreiss
success
केवल अगर आग लगती है तो AJAX कॉल सफल होता है, यानी अंततः एक HTTP 200 स्थिति देता है। सफलता के बावजूद अनुरोध समाप्त होने पर error
आग विफल हो जाती है और complete
आग लगती है।
jqXHR
वस्तु success
(द्वारा $.ajax
लौटे) पर jQuery 1.8 में fail
और always
साथ complete
साथ done
, error
से बदला गया।
हालांकि आपको अभी भी पुराने वाक्यविन्यास के साथ AJAX अनुरोध आरंभ करने में सक्षम होना चाहिए। इसलिए इन समान बातें करते हैं:
// set success action before making the request
$.ajax({
url: '...',
success: function(){
alert('AJAX successful');
}
});
// set success action just after starting the request
var jqxhr = $.ajax("...")
.done(function() { alert("success"); });
यह परिवर्तन jQuery 1.5 के deferred object साथ संगतता के लिए है। स्थगित (और अब Promise
, जिनमें Chrome और विदेशी मुद्रा में पूर्ण स्थानीय ब्राउज़र समर्थन हासिल है) आप श्रृंखला के लिए अनुमति देते अतुल्यकालिक कार्रवाई:
$.ajax("parent").
done(function(p) { return $.ajax("child/" + p.id); }).
done(someOtherDeferredFunction).
done(function(c) { alert("success: " + c.name); });
कार्यों की यह श्रृंखला कॉलबैक आप success
साथ मिल के एक नेस्टेड पिरामिड की तुलना में बनाए रखने के लिए आसान है।
हालांकि, कृपया कि done
अब Promise
वाक्य रचना के पक्ष में पदावनत किया गया है ध्यान दें कि then
बजाय का उपयोग करता है:
$.ajax("parent").
then(function(p) { return $.ajax("child/" + p.id); }).
then(someOtherDeferredFunction).
then(function(c) { alert("success: " + c.name); }).
catch(function(err) { alert("error: " + err.message); });
यह गोद लेने के लायक है क्योंकि async
और await
वादों सुधार वाक्य रचना (और त्रुटि हैंडलिंग) का विस्तार:
try {
var p = await $.ajax("parent");
var x = await $.ajax("child/" + p.id);
var c = await someOtherDeferredFunction(x);
alert("success: " + c.name);
}
catch(err) {
alert("error: " + err.message);
}
फ़ंक्शन निर्माण, और अनुरोध करने के बाद फ़ंक्शन सेट करें। ऐसा लगता है कि दोनों एक जैसे हैं ... क्या आप मुझे कुछ और अंतर दिखाएंगे ??? – suhailvs
@ सुहैल - वास्तव में कोई भी नहीं है; jQuery 1.6 में jQuery सफलता 1.8 में 'सफलता' थी, जिसे' किया गया 'द्वारा प्रतिस्थापित किया गया है। वे एक ही तरीके से काम करते हैं, लेकिन 'किया' बाकी jQuery के साथ अधिक संगत है। – Keith
success
कॉलबैक जब अनुरोध सफल होने और $.ajax
कॉल का हिस्सा है कि लागू किया जाता है। done
वास्तव में ऑब्जेक्ट का हिस्सा $.ajax()
द्वारा लौटाया गया है, और jQuery 1.8 में success
को प्रतिस्थापित करता है।
.success()
केवल तभी कॉल किया जाता है जब आपका वेबसर्वर 200 ओके HTTP शीर्षलेख के साथ प्रतिक्रिया करता है - मूल रूप से जब सबकुछ ठीक होता है।
स्थगित किए जाने पर कॉल किए गए कॉलबैक() को निकाल दिया जाएगा जब स्थगित हल हो जाएगा। विफल() से जुड़े कॉलबैक को हटा दिया जाएगा जब स्थगित अस्वीकार कर दिया जाता है।
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
यह ध्यान देने योग्य है कि .success() को तब नहीं कहा जाता है जब विकृत JSON को 200/OK स्थिति कोड के साथ वापस भेजा जाता है। विशेष रूप से, मैंने वेबरवर बैकएंड कोड के साथ NaN मान उत्पन्न करने और उन्हें जावास्क्रिप्ट NaN (यानी एक प्रतीक के रूप में, स्ट्रिंग 'NaN' नहीं) के रूप में क्रमबद्ध करने के साथ एक समस्या में भाग लिया है जो वास्तव में मान्य JSON नहीं है - इसलिए JSON के रूप में प्रतिक्रिया का विश्लेषण विफल रहता है और .fail() निष्पादित किया जाता है, लेकिन प्रतिक्रिया स्थिति 200 है। लेकिन यह अभी भी सच है कि सफलता केवल ओके स्टेटस कोड के साथ बुलाया जाता है; बस यह इंगित करना चाहता था कि सिर्फ इसलिए कि यह ठीक है, इसका मतलब यह नहीं है कि यह 'सफल' है;) – Kasapo
आपने $ .ajax() की एक पूर्ण() विधि के बारे में कहाँ पढ़ा? AFAIK किया गया विधि $ से संबंधित है। ऑब्जेक्ट ऑब्जेक्ट। हो सकता है कि आप इसके बजाय .complete() के बारे में बात कर रहे हों? Http://api.jquery.com/jQuery पर – fcalderan
।AJAX/पृष्ठ –
ठीक है, यह jQuery 1.8 है :) चूंकि $ .ajax jQuery 1.5 से एक वादा वापस करता है। यह स्थिरता के मामले (स्थगित इंटरफ़ेस का उपयोग करके) के लिए एक साधारण प्रतिस्थापन है: किया गया() सफलता() विफल हो जाता है() पूर्ण() और हमेशा() के लिए() – fcalderan