2009-01-02 15 views
23

मान लें कि मेरे पास निम्न jQuery AJAX कॉल है:आप AJAX कॉल से त्रुटियों को कैसे संभालते हैं?

$.ajax({ 
    type: "POST", 
    url: "MyUrl", 
    data: "val1=test", 
    success: function(result){ 
     // Do stuff 
    } 
}); 

अब, जब यह AJAX कॉल किया जाता है, तो मैं सर्वर-साइड कोड को कुछ त्रुटि हैंडलिंग चेक के माध्यम से चलाने के लिए चाहता हूं (उदाहरण के लिए उपयोगकर्ता अभी भी लॉग इन है, क्या उनके पास इस कॉल का उपयोग करने की अनुमति है, डेटा वैध है, आदि)। यदि कोई त्रुटि पता चला है, तो मैं उस त्रुटि संदेश को क्लाइंट साइड पर बैब कैसे करूं?

मेरा प्रारंभिक विचार एक JSON ऑब्जेक्ट को दो फ़ील्ड के साथ वापस करना होगा: त्रुटि और त्रुटि संदेश। इन फ़ील्ड्स को jQuery AJAX कॉल में चेक किया जाएगा:

$.ajax({ 
    type: "POST", 
    url: "MyUrl", 
    data: "val1=test", 
    success: function(result){ 
     if (result.error == "true") 
     { 
      alert("An error occurred: " & result.errorMessage); 
     } 
     else 
     { 
      // Do stuff 
     } 
    } 
}); 

यह मुझे थोड़ा सा गड़बड़ महसूस करता है, लेकिन यह काम करता है। क्या कोई बेहतर विकल्प है?

उत्तर

23

व्यक्तिगत रूप से, मेरे पास मेरी लाइब्रेरी में निम्न कोड के समान कोड है।

$.ajaxSetup({ 
    error: function(xhr){ 
     alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText); 
    } 
}); 

jQuery docs Ajax/jQuery.ajaxSetup

बुलबुला का सबसे अच्छा तरीका है कि सर्वर साइड (php का उपयोग करके) क्लाइंट साइड से त्रुटि में कहीं Ajax अनुरोध के माध्यम से एक हैडर भेजने के लिए है 400 के (जो हमेशा साथ जुड़ा हुआ है त्रुटियों)। एक बार अजाक्स अनुरोध प्राप्त करने के बाद यह आपके त्रुटि फ़ंक्शन को ट्रिगर करेगा। इसका मतलब यह भी है कि आपको किसी त्रुटि को परिभाषित करने की आवश्यकता नहीं है: प्रत्येक $ .ajax कॉल में कॉल करें।

header('HTTP/1.0 419 Custom Error'); 

उद्धरण से w3.org header information

त्रुटि 4xx, 5xx 4xx कोड ग्राहक भटक गए हैं लगता है, जिसमें मामलों के लिए हैं, और जिन मामलों में सर्वर है कि बारे में पता है के लिए 5xx कोड सर्वर मिटा दिया गया है। इन मामलों को सामान्य रूप से अलग करना असंभव है, इसलिए अंतर केवल सूचनात्मक है। शरीर खंड में मानव पठनीय रूप में त्रुटि का वर्णन करने वाला दस्तावेज़ हो सकता है। दस्तावेज़ एमआईएम प्रारूप में है, और अनुरोध में स्वीकार्य प्रारूपों के लिए केवल पाठ/सादा, पाठ/एचटीएमएल या एक में हो सकता है।

3

क्या jQuery AJAX फ़ंक्शन अंत में एक और पैरामीटर स्वीकार नहीं करता है, विफल कॉल के लिए कॉलबैक? यदि ऐसा है, तो सफलता कॉलबैक के बाद बस fail:function(...){..} जोड़ें।

+0

मेरा मानना ​​है कि "त्रुटि" के लिए भी एक है। – BobbyShaftoe

+0

हां, एक "त्रुटि" कॉलबैक है जो "सफलता" कॉलबैक के समान तरीके से काम करता है। हालांकि, मुझे यकीन नहीं था कि HTTP त्रुटि लौटने पर यहां सबसे अच्छा तरीका था। –

+0

जब तक आप सर्वर पक्ष (लॉगिंग, आदि) पर त्रुटि का ख्याल रखते हैं, तब तक इसे क्लाइंट को भेजने पर कोई समस्या नहीं है, इसलिए यह भी संभाल सकता है। – rodbv

0

HTTP त्रुटि का उपयोग कर सर्वर पक्ष पर एक त्रुटि कोड लौटाएं जो त्रुटि के बराबर है। फिर त्रुटि कॉलबैक का उपयोग करें। यह आपको अपने वेबसर्वर द्वारा दी गई त्रुटियों को दिखाने की अनुमति देगा।

5
$.ajax({ 
    type: "POST", 
    url: "MyUrl", 
    data: "val1=test", 
    success: function(result){ 
     // Do stuff 
    }, 
    error: function(request,status,errorThrown) { 
     // There's been an error, do something with it! 
     // Only use status and errorThrown. 
     // Chances are request will not have anything in it. 
    } 
}); 
+1

मेरे लिए, स्थिति हमेशा "त्रुटि" होती है और त्रुटि ट्राउन हमेशा अनिर्धारित होती है। आप यहां से कोई दिलचस्प जानकारी कैसे प्राप्त करते हैं? –

+0

देखें: http://api.jquery.com/jQuery.ajax/, त्रुटि –

+0

यह भी ध्यान दें कि 'request.status' में त्रुटि कोड है। –

0

इस प्रश्न का उत्तर देने में काफी देर हो चुकी है, लेकिन मुझे लगता है कि यह किसी के लिए es6 और jquery 2.2 का उपयोग करने के लिए फायदेमंद होगा।

मैं आम तौर पर मेरी कोड

sendAjaxRequest(URL, dataToSend) { 
    return $.ajax({ 
     type  : 'POST', 
     url   : URL, 
     data  : JSON.stringify(dataToSend), 
     dataType : 'json' 
    }).fail((responseData) => { 
     if (responseData.responseCode) { 
      console.error(responseData.responseCode); 
     } 
    }); 
}, 

मैं एक आस्थगित fail विधि है जो कुछ त्रुटि तब होती है, तो कहा जाएगा संलग्न में इस (आस्थगित दृष्टिकोण) का पालन करें। यह त्रुटि कॉलबैक विकल्प का एक वैकल्पिक निर्माण है, .fail() विधि नवीनतम jquery में बहिष्कृत .error() विधि को प्रतिस्थापित करता है।

sendAjaxRequest बुलाने की जगह से आगे मैं then jQuery वादा कॉलबैक का उपयोग

sendAjaxRequest(URL, dataToSend) 
.then(
    (success) => { 
    }, 
    (error) => { 
    } 
); 

यह सफलता या त्रुटि फ़ंक्शन सर्वर से प्राप्त प्रतिक्रिया पर आधारित कॉल करेंगे।

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