2013-08-01 13 views
13

मुझे किसी भी AJAX 401 Unauthorised अपवाद को पकड़ना पसंद है, लेकिन मेरे सभी AJAX प्रश्नों को बदलने की इच्छा नहीं है। क्या किसी भी $ .ajax कॉल के लिए इसे बदलने का कोई तरीका है (किसी भी error हैंडलर को ओवरराइट करें)?JQuery किसी भी AJAX त्रुटि को पकड़ें

+3

गूगल का उपयोग करते हुए कुछ ही सेकंड में आप एक जवाब लाएगा: '$ .ajaxSetup ({ statusCode: { 401: function() { // इस किसी भी और सभी पहुँच अस्वीकृत त्रुटियां पकड़ेगा } } }) ; ' –

उत्तर

20

आप वैश्विक ajax ईवेंट हैंडलर्स .ajaxError()

$(document).ajaxError(function(event, jqxhr, settings, exception) { 
    if (jqxhr.status== 401) { 
        $("div.log").text("Triggered ajaxError handler."); 
    } 
}); 
+0

कुछ बार 'jqxhr' शून्य है, लेकिन पैलेस समाधान मेरे लिए काम करता है। – mtoloo

+0

जब भी मैं इस स्निपेट का उपयोग करता हूं तो स्टॉज हमेशा 0 होता है। कोई विचार? – Dave

11

का उपयोग आप कुछ इस तरह कर सकते हैं कर सकते हैं:

$(function() { 
    $.ajaxSetup({ 
     error: function(jqXHR, exception) { 
      if (jqXHR.status === 401) { 
       alert('HTTP Error 401 Unauthorized.'); 
      } else { 
       alert('Uncaught Error.\n' + jqXHR.responseText); 
      } 
     } 
    }); 
}); 

यह आपके ajax कॉल में से किसी में त्रुटि को पकड़ लेगा।

+2

अगर किसी AJAX कॉल में 'त्रुटि' कॉलबैक था, तो '$ .ajax ({url:' ', त्रुटि: फ़ंक्शन() {}} जैसे विकल्पों में निर्दिष्ट किया गया है, तो यह विफल हो जाएगा) ' –

2

रूप .ajaxError() का उपयोग कर $.ajaxSetup() समारोह का प्रयास करें अजाक्स कॉल के लिए आप वैश्विक विकल्प निर्दिष्ट करने की अनुमति देगा। सावधान रहें, हालांकि ajaxSetup() पर अन्य कॉल वैश्विक विकल्पों को ओवरराइट कर देंगे और ajax() विधि में निर्दिष्ट स्थानीय विकल्प वैश्विक सेटिंग्स ओवरराइड करेंगे।

Documentation

2

को पकड़ने के लिए एक 401 स्थिति कोड सामान्यतया कहीं अपने पृष्ठ के लिए

$.ajaxSetup({ 
    statusCode: { 
     401: function(err){ 
     console.log('Login Failed.', err.responseJSON); 
     // or whatever... 
     } 
    } 
    }); 

जोड़ने से पहले AJAX कॉल निकाल दिया जाता है।

संबंधित मुद्दे