क्या मुझे सफलता और त्रुटि के बजाय नए jQuery AJAX कोड के लिए .done () और .fail () का उपयोग करना चाहिए


166

मैंने इस तरह कोडित किया है:

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID },
    success: function (data) {
        $('#CityID').html(data);
    },
    error: function (ajaxContext) {
        alert(ajaxContext.responseText)
    }
});

लेकिन जब मैं अंत में jQuery के .ajax()दस्तावेज को देखता हूं तो ऐसा लगता है कि मुझे नीचे इस तरह कोडिंग करना चाहिए या कम से कम इसे जोड़ने का सुझाव .done()है .fail():

var request = $.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
});

request.done(function (data) {
    xxx;
});
request.fail(function (jqXHR, textStatus) {
    xxx;
});

अपडेट करें

अगर मैं इसे पसंद करता हूं तो यह समान है या इसे तीन में तोड़ने का कुछ फायदा है?

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
}).done(function (data) {
    xxx;
}).fail(function (jqXHR, textStatus) {
    xxx;
});

जवाबों:


165

जैसा कि user2246674 द्वारा कहा गया है, ajax फ़ंक्शन का उपयोग करना successऔर errorपैरामीटर मान्य है।

मिसाल के जवाब के अनुरूप होना, डॉक्टर को पढ़ना:

पदावनति सूचना :

JqXHR.success (), jqXHR.error (), और jqXHR.complete () कॉलबैक jQuery 1.8 में पदावनत किए जाएंगे। उनके अंतिम निष्कासन के लिए अपना कोड तैयार करने के लिए, jqXHR.done (), jqXHR.fail (), और jqXHR.always () के बजाय का उपयोग करें।

यदि आप कॉलबैक-मैनिपुलेशन फ़ंक्शन (उदाहरण के लिए विधि-चाइनिंग का उपयोग कर) का उपयोग कर रहे हैं .done(), .fail()और .always()इसके बजाय success(), error()और complete()


54
मैं असहमत हूं। के बारे में संदर्भ वार्ता कॉलबैक-हेरफेर कार्यों (उदाहरण के लिए .error, .success), जो कर रहे हैं अधिक सार्वभौमिक आस्थगित पैटर्न के पक्ष में पदावनत है, लेकिन करने के लिए पैरामीटर ajaxविधि अब मान्य नहीं कर रहे हैं और दोनों वैध और स्वीकार्य हैं - jQuery 1.9 / 2.0 में भी! सभी मौजूदा रूपों में, ajaxअभी भी एक आस्थगित देता है; संभवतः पहले से ही अटैच कॉलबैक के साथ।
user2246674

1
यहाँ यह है, jQuery 1.9, और सफलता :, त्रुटि :, और पूर्ण: अभी भी उपयोग करने योग्य हैं। हालाँकि, मेरा सवाल यह है कि .done () == to success:?
वृषभ २३'१३

3
JQuery के 1.10 स्रोत कोड से @GregoryLewis jqXHR.success = jqXHR.done;:।
माइकल लाफार्ग

9
मैं ईमानदारी से पसंद करते हैं success, fail, always
अहानिबेक्स्ड

4
वाह, मैंने डॉक्यूमेंटेशन को भी गलत बताया। मैंने सचमुच सोचा था कि $ .ajax के लिए 'सफलता' / 'त्रुटि' विकल्प 'किए / असफल' के लिए फिर से लिखे गए थे। यह सिर्फ कॉलबैक विधि श्रृंखला थी। ईमानदारी से, मुझे लगता है कि उन्हें विकल्प नामों को भी स्विच करना चाहिए था। इससे मुझे घंटों तक जाम लगा रहा।
ओजजीइंजिएंट

12

मैं @Michael Laffargue की पोस्ट पर कुछ जोड़ना चाहता हूं:

jqXHR.done() ज्यादा तेज़ है!

jqXHR.success()कॉलबैक में कुछ लोड समय होता है और कभी-कभी स्क्रिप्ट ओवरलीक कर सकता है। मुझे लगता है कि पहले कठिन रास्ते पर है।

अपडेट करें:

का उपयोग करना jqXHR.done(), jqXHR.fail()और jqXHR.always()आप ajax अनुरोध के साथ बेहतर हेरफेर कर सकते हैं। सामान्य तौर पर आप किसी चर या वस्तु में अजाक्स को परिभाषित कर सकते हैं और उस चर या वस्तु को अपने कोड के किसी भी हिस्से में उपयोग कर सकते हैं और डेटा तेजी से प्राप्त कर सकते हैं। अच्छा उदाहरण:

/* Initialize some your AJAX function */
function call_ajax(attr){
    var settings=$.extend({
        call            : 'users',
        option          : 'list'
    }, attr );

    return $.ajax({
        type: "POST",
        url: "//exapmple.com//ajax.php",
        data: settings,
        cache : false
    });
}

/* .... Somewhere in your code ..... */

call_ajax({
    /* ... */
    id : 10,
    option : 'edit_user'
    change : {
          name : 'John Doe'
    }
    /* ... */
}).done(function(data){

    /* DO SOMETHING AWESOME */

});

9
क्या आपके पास कोई विश्वसनीय और सत्यापन योग्य संदर्भ है?
पॉल वर्गास

@PaulVargas मैं कुछ प्रदर्शन परीक्षण कभी नहीं करता, लेकिन मेरे अभ्यास में मुझे यह काम करने के लिए मिलता है। आप खुद से कोशिश कर सकते हैं।
इविज़न स्टीफन स्टिपिक

1
कृपया कोई सबूत दें जो विश्वसनीय हो।
9

जैसा कि आप जानते हैं, फ़ंक्शन से कुछ ऑब्जेक्ट वापस करने की तुलना में कॉलबैक फ़ंक्शन धीमी हैं। कभी-कभी छोटा प्रभाव होता है लेकिन कई बार आपके पास कई कॉल हो सकते हैं।
इविज़न स्टीफन स्टिपिक

7

सरल शब्दों में

$.ajax("info.txt").done(function(data) {
  alert(data);
}).fail(function(data){
  alert("Try again champ!");
});

यदि इसकी जानकारी प्राप्त होती है। तो फिर यह अलर्ट करेगा और जो भी फ़ंक्शन आप जोड़ते हैं या यदि कोई कैसे सर्वर से info.text को पुनर्प्राप्त करने में असमर्थ है तो अलर्ट या त्रुटि फ़ंक्शन।


0

जब हम अपने पुराने मौजूदा एप्लिकेशन में JQuery को 1.x से 2x या 3.x पर माइग्रेट करने जा रहे हैं, तो हम सफलता की बजाय JD अप ग्रेडेशन इन तरीकों को अपदस्थ करने जा रहे हैं। उदाहरण जब हम सर्वर वेब विधियों के लिए एक कॉल करते हैं तो सर्वर रिटर्न ऑब्जेक्ट्स को कॉलिंग विधियों (अजाक्स विधियों) का वादा करता है और इस वादा ऑब्जेक्ट्स में .done, .fail..etc विधियां शामिल होती हैं। हम सफलता और विफलता की प्रतिक्रिया के लिए समान होंगे। नीचे उदाहरण है (यह POST अनुरोध के लिए है उसी तरह हम GET जैसे अनुरोध प्रकार के लिए निर्माण कर सकते हैं ...)

 $.ajax({
            type: "POST",
            url: url,
            data: '{"name" :"sheo"}',
            contentType: "application/json; charset=utf-8",
            async: false,
            cache: false
            }).done(function (Response) {
                  //do something when get response            })
           .fail(function (Response) {
                    //do something when any error occurs.
                });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.