मैं एक अजाक्स क्वेरी पोस्ट त्रुटि कैसे पकड़ सकता हूं?


209

यदि अजाक्स अनुरोध विफल हो जाता है तो मैं त्रुटि को पकड़ना और उचित संदेश दिखाना चाहूंगा।

मेरा कोड निम्नलिखित की तरह है, लेकिन मैं असफल अजाक्स अनुरोध को पकड़ने का प्रबंधन नहीं कर सका।

function getAjaxData(id)
{
     $.post("status.ajax.php", {deviceId : id}, function(data){

        var tab1;

        if (data.length>0) {
            tab1 = data;
        }
        else {
            tab1 = "Error in Ajax";
        }

        return tab1;
    });
}

मुझे पता चला कि, "अजाक्स में त्रुटि" कभी भी निष्पादित नहीं होती है जब अजाक्स अनुरोध विफल हो जाता है।

मैं अजाक्स त्रुटि को कैसे संभालूं और विफल होने पर उचित संदेश दिखाऊं?

जवाबों:


304

JQuery 1.5 के बाद से आप आस्थगित ऑब्जेक्ट तंत्र का उपयोग कर सकते हैं:

$.post('some.php', {name: 'John'})
    .done(function(msg){  })
    .fail(function(xhr, status, error) {
        // error handling
    });

एक और तरीका उपयोग कर रहा है .ajax:

$.ajax({
  type: "POST",
  url: "some.php",
  data: "name=John&location=Boston",
  success: function(msg){
        alert( "Data Saved: " + msg );
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
     alert("some error");
  }
});

14
@Yuck $ .post आस्थगित वस्तुओं का उपयोग करके एक त्रुटि कॉलबैक स्वीकार कर सकता है। एक उदाहरण के लिए नीचे मेरे उत्तर पर एक नज़र डालें।
माइकल वीनबल

2
इसके अलावा, मैं और $.ajaxअधिक पठनीय बनाने के लिए अपने के लिए एक हैश का उपयोग करने का तरीका है data। उदाहरण के लिए:{ name : 'John', location: 'Boston' }
briangonzalez

3
उपरोक्त सफलता और त्रुटि कॉलबैक jQuery के रूप में अप्रचलित हैं। 1.8 api.jquery.com/jQuery.post
बाल्दी

@MichaelVeneble मुझे लगता है कि आप उपयोग कर सकते हैं$.post().error()
क्लिंटघ

288

jQuery 1.5 ने आस्थगित वस्तुओं को जोड़ा जो इस अच्छी तरह से संभालती हैं। कॉल $.postकरने के बाद बस किसी भी हैंडलर को कॉल करें और संलग्न करें। आस्थगित ऑब्जेक्ट भी आपको कई सफलता और त्रुटि संचालकों को संलग्न करने की अनुमति देते हैं।

उदाहरण:

$.post('status.ajax.php', {deviceId: id})
    .done( function(msg) { ... } )
    .fail( function(xhr, textStatus, errorThrown) {
        alert(xhr.responseText);
    });

1.8 jQuery से पहले, फ़ंक्शन doneको कॉल किया गया था successऔर failबुलाया गया था error


3
+1 बहुत अच्छा है, लेकिन अभी भी वाक्य रचना के बारे में पागल नहीं है। उम्मीद है कि यह भविष्य के रिलीज में एकीकृत हो जाएगा।
युक

25
यह स्वीकृत उत्तर होना चाहिए। वर्तमान स्वीकृत उत्तर "एक अलग विधि का उपयोग करें" है; इस उत्तर में कहा गया है, "यहां बताया गया है कि आपकी विधि कैसे काम करती है"। उत्तरार्द्ध आमतौर पर एसओ पर पसंद किया जाता है। दरअसल, इसे $ .post प्रलेखन में शामिल किया जाना चाहिए !!!
मार्क ई। हासे

2
api.jquery.com/deferred.fail , api.jquery.com/deferred.done प्रलेखन के लिए
Deleplace

वैसे responseJSONसंपत्ति भी है जो कि अजाक्स प्रकार के मामले में भी बहुत उपयोगी है json
ivkremer

91
$.ajax({
  type: 'POST',
  url: 'status.ajax.php',
  data: {
     deviceId: id
  },
  success: function(data){
     // your code from above
  },
  error: function(xhr, textStatus, error){
      console.log(xhr.statusText);
      console.log(textStatus);
      console.log(error);
  }
});

15
$.post('someUri', { }, 
  function(data){ doSomeStuff })
 .fail(function(error) { alert(error.responseJSON) });

5
यहाँ थोड़ा और स्पष्टीकरण जोड़ने से भविष्य के पाठकों को मदद मिलेगी।
एरिक ब्राउन

13

AjaxError को लागू करने का एक सरल तरीका है :

जब भी कोई अजाक्स अनुरोध त्रुटि के साथ पूरा होता है, jQuery ajaxError घटना को ट्रिगर करता है। कोई भी और सभी हैंडलर जो इस समय .ajaxError () पद्धति के साथ पंजीकृत हैं, निष्पादित किए जाते हैं।

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

$('.log').ajaxError(function() {
  $(this).text('Triggered ajaxError handler.');
});

मैं ajaxError प्रलेखन पढ़ने का सुझाव दूंगा । यह ऊपर दिखाए गए सरल उपयोग के मामले से अधिक है - मुख्य रूप से इसका कॉलबैक कई मापदंडों को स्वीकार करता है:

$('.log').ajaxError(function(e, xhr, settings, exception) {
  if (settings.url == 'ajax/missing.html') {
    $(this).text('Triggered ajaxError handler.');
  }
});

1
+1 - मैं जोड़ना होगा कि इस हैंडलर कई तर्क हो जाता है, तो आप वास्तविक त्रुटि, प्रतिक्रिया कोड, यूआरएल, आदि प्रदर्शित कर सकते हैं
निक Craver

ध्यान दें कि jQuery 1.8 के रूप में, .ajaxError () विधि केवल दस्तावेज़ से जुड़ी होनी चाहिए।
ननकी

0

आपको responseText लॉग करना होगा:

$.ajax({
    type: 'POST',
    url: 'status.ajax.php',
    data: {
    deviceId: id
  }
})
.done(
 function (data) {
  //your code
 }
)
.fail(function (data) {
      console.log( "Ajax failed: " + data['responseText'] );
})

0

आप .onerror हैंडलर को ajax ऑब्जेक्ट से जोड़ते हैं, क्यों लोग प्रतिक्रिया के लिए JQuery को पोस्ट करने पर जोर देते हैं जब वेनिला ने क्रॉस किया ...

शीघ्र उदाहरण:

ajax = new XMLHttpRequest();
ajax.open( "POST", "/url/to/handler.php", true );
ajax.onerror = function(){
    alert("Oops! Something went wrong...");
}
ajax.send(someWebFormToken );
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.