jQuery के अजाक्स त्रुटि फ़ंक्शन


130

मेरे पास एक पेज पर एक अजाक्स कॉल पासिंग डेटा है जो फिर एक मूल्य देता है।

मैंने पृष्ठ से सफल कॉल को पुनः प्राप्त कर लिया है, लेकिन मैंने इसे कोडित किया है ताकि यह एस्प में एक त्रुटि उठा सके। मैं उस त्रुटि को jquery से कैसे प्राप्त करूं?

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

cache: false,
url: "addInterview_Code.asp",
type: "POST",
datatype: "text",
data: strData,
success: function (html) {
    alert('successful : ' + html);
    $("#result").html("Successful");
},
error: function (error) {
    **alert('error; ' + eval(error));**
}

यह त्रुटि बिट है जो मुझे समझ में नहीं आता है। फ़ंक्शन में मुझे किस पैरामीटर की आवश्यकता होती है, ताकि मैं तब सर्वर में उठाए गए त्रुटि संदेश का उपयोग कर सकूं।


वहाँ एक टाइपो है: यह dataTypeनहीं है datatype
अलेजांद्रो नावा


7
@ alej27: शब्दांकन अजीब तरह का है, लेकिन यह नहीं कहता कि आप उन दोनों का उपयोग नहीं कर सकते, यह कहते हैं कि एक अनुरोध सफलता और त्रुटि नहीं कहेगा (क्योंकि वे परस्पर अनन्य हैं)।
मार्टी वेंस

यहाँ जवाब के साथ देखभाल का उपयोग करें। jQuery 3.0 के रूप में हटाए गए नोटों को हटा दिया गया है .errorऔर .successअधिक महत्वपूर्ण हो गए हैं।
मार्क शुल्त्स

जवाबों:


221

अजाक्स errorफ़ंक्शन में आवश्यक पैरामीटर हैं jqXHR, exceptionऔर आप इसे नीचे की तरह उपयोग कर सकते हैं:

$.ajax({
    url: 'some_unknown_page.html',
    success: function (response) {
        $('#post').html(response.responseText);
    },
    error: function (jqXHR, exception) {
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#post').html(msg);
    },
});

डेमो FIDDLE


पैरामीटर

jqXHR:

यह वास्तव में एक त्रुटि वस्तु है जो इस तरह दिखता है

अजाक्स त्रुटि jqXHR वस्तु

आप इसे अपने स्वयं के ब्राउज़र कंसोल में भी देख सकते हैं, जैसे console.logकि errorफंक्शन के अंदर का उपयोग करके :

error: function (jqXHR, exception) {
    console.log(jqXHR);
    // Your error handling logic here..
}

हम statusत्रुटि कोड प्राप्त करने के लिए इस ऑब्जेक्ट से संपत्ति का उपयोग कर रहे हैं , जैसे कि अगर हमें स्थिति = 404 मिलता है तो इसका मतलब है कि अनुरोधित पृष्ठ नहीं मिल सकता है। यह बिल्कुल मौजूद नहीं है। उस स्थिति कोड के आधार पर हम उपयोगकर्ताओं को लॉगिन पृष्ठ या हमारे व्यावसायिक तर्क के लिए जो भी आवश्यक हो, पुनर्निर्देशित कर सकते हैं।

अपवाद:

यह स्ट्रिंग चर है जो अपवाद प्रकार दिखाता है। इसलिए, यदि हम 404 त्रुटि प्राप्त कर रहे हैं, तो exceptionपाठ केवल 'त्रुटि' होगा। इसी तरह, हम अन्य अपवाद ग्रंथों के रूप में 'टाइमआउट', 'गर्भपात' प्राप्त कर सकते हैं।


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

तो, अगर आप jQuery 1.8 या इसके बाद के संस्करण का उपयोग कर रहे हैं, तो हमें सफलता और त्रुटि फ़ंक्शन तर्क को अपडेट करना होगा: -

// Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax("some_unknown_page.html")
    .done(function (response) {
        // success logic here
        $('#post').html(response.responseText);
    })
    .fail(function (jqXHR, exception) {
        // Our error logic here
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#post').html(msg);
    })
    .always(function () {
        alert("complete");
    });

आशा करता हूँ की ये काम करेगा!


6
दिलचस्प है कि यह ajaxSetup का उपयोग करने के लिए अनुशंसित नहीं है। देखें api.jquery.com/jquery.ajaxsetup
SleepyBoBos

1
@ palareн मुझे लगता है कि आप डिप्रेशन नोटिस को गलत समझते हैं। यदि आप ध्यान दें, तो पदावनति नोटिस jqXHR के तरीकों की एक पदावनति के बारे में बात कर रहा है, लेकिन आपके उपरोक्त उदाहरण में सफलता, त्रुटि और पूर्णता का उपयोग किसी वस्तु के भीतर $ .ajax विधि से किया जाता है। यह पदावनत नहीं किया गया है और आपको अपना कोड बदलने की आवश्यकता नहीं है। हालाँकि, यदि कोई विधियों की श्रृंखला बनाना पसंद करता है तो आप इस शैली का उपयोग कर सकते हैं। जब मैं "पदावनति ..." पढ़ता हूं, तो इसने मुझे (बिना किसी कारण के) फेंक दिया। :-)
bchr02

JQuery 3.0 के रूप में पर ध्यान दिया पदावनत .errorऔर .successके रूप में वे हटा दिया गया है और अधिक महत्वपूर्ण हो
मार्क Schultheiss

99

इसे इस्तेमाल करे:

error: function(jqXHR, textStatus, errorThrown) {
  console.log(textStatus, errorThrown);
}

यदि आप एक सत्यापन त्रुटि के बारे में अपने सामने वाले को सूचित करना चाहते हैं, तो json को वापस करने का प्रयास करें:

dataType: 'json',
success: function(data, textStatus, jqXHR) {
   console.log(data.error);
}

आपकी एस्प स्क्रिप्ट स्कोल्ड रिटर्न:

{"error": true}

1
TextSttaus और errorThrown क्या है? क्या आप समझा सकते हैं
अन्नपूर्णा

4

यहां बताया गया है कि आप एस्प त्रुटि को कैसे खींचते हैं।

              cache: false,
              url: "addInterview_Code.asp",
              type: "POST",
              datatype: "text",
              data: strData,
              success: function (html) {
                  alert('successful : ' + html);
                  $("#result").html("Successful");
              },
              error: function (jqXHR, textStatus, errorThrown) {
                  if (jqXHR.status == 500) {
                      alert('Internal error: ' + jqXHR.responseText);
                  } else {
                      alert('Unexpected error.');
                  }
              }

2
error(jqXHR, textStatus, errorThrown)

http://api.jquery.com/jQuery.ajax/


9
कृपया कुछ खोज प्रदान करें, न कि केवल एक कोड और लिंक डॉक्स।
ग्रेग डबकी

12
लगभग कुछ भी नहीं करने के लिए धन्यवाद।
जूडसैन

उदाहरण के लिए, आप कह सकते हैं कि "ओपी एक फंक्शन एरर (त्रुटि) का उपयोग कर रहा है, लेकिन jquery एक फंक्शन एरर (jqXHR, textStatus, errorThrown) कह रहा है। ओपी के स्निपेट में 2 लापता मापदंडों को नोट करें।"
बजे

2
          cache: false,
          url: "addInterview_Code.asp",
          type: "POST",
          datatype: "text",
          data: strData,
          success: function (html) {
              alert('successful : ' + html);
              $("#result").html("Successful");
          },
          error: function(data, errorThrown)
          {
              alert('request failed :'+errorThrown);
          }

2

आप एक फ़ंक्शन का उपयोग कर रहे हैं

error(error) 

लेकिन jquery वास्तव में तीन मापदंडों के साथ एक फ़ंक्शन की तलाश में है:

error(jqXHR, textStatus, errorThrown)

आपको दो और पैरामीटर जोड़ने होंगे।

ALSO: कृपया उपरोक्त सभी टिप्पणियों पर एक नज़र डालें, जो 'पदावनत' का उल्लेख करती हैं :)

$.ajax("www.stackoverflow.com/api/whatever", {
    dataType:"JSON"
    data: { id=1, name='example' }
}).succes(function (result) {
    // use result
}).error(function (jqXHR, textStatus, errorThrown) {
    // handle error
});

4
आपको दो और पैरामीटर जोड़ने की आवश्यकता होगी - यह बहुत गलत है।
डेवलपर

1
हम्म। अगर आपको बस इतना ही कहना है - तो शायद कुछ न कहें? या, आप अपने कथन को स्पष्ट कर सकते हैं और वास्तव में मदद कर सकते हैं। आपकी पंसद।

1
जावास्क्रिप्ट में, कहते हैं कि आपके पास एक विधि है - function myMethod (err) { alert(err); }और फिर इसे कॉल करें जैसे myMethod ("something is wrong", 500, some_object)- यह बिना किसी समस्या के काम करेगा। आपके कथन के अनुसार, यह केवल तभी काम करेगा जब विधि हस्ताक्षर हो function myMethod (err, status, some_object)। उपरोक्त उदाहरण के बारे में भूल जाओ, successआपके पास जवाब में घटना का हस्ताक्षर वास्तव में है .success(data, status, xhr), लेकिन अगर आपको सिर्फ परिणाम की आवश्यकता है, तो हम आमतौर पर इसे बांधते हैं .success (data)और दोनों काम करते हैं।
डेवलपर

और इस उत्तर को जोड़कर आप क्या मूल्य लाए? IMO आपके उत्तर में कोई जानकारी नहीं है जो पिछले उत्तरों में गायब थी। केवल एक चीज जो आपने की थी वह इस सवाल को फिर से ढेर में खींच रही थी।
डेवलपर

0

Jquery.com से:

The jqXHR.success(), jqXHR.error(), and jqXHR.complete()
callback methods introduced injQuery 1.5 are deprecated
as of jQuery 1.8. To prepare your code for their eventual 
removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.

यदि आप चाहते हैं कि वैश्विक हैंडलर आप उपयोग कर सकें:

.ajaxStart(), .ajaxStop(),
.ajaxComplete(), .ajaxError(),
.ajaxSuccess(), .ajaxSend()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.