2010-02-01 14 views
16

में त्रुटि को कैसे प्रबंधित करें मेरे पास एक jquery कोड है जिसमें मैं get() का उपयोग कर रहा हूं और कुछ दूरस्थ यूआरएल/फ़ाइल को कॉल कर रहा हूं। अब मैं जानना चाहता हूं कि इससे त्रुटियों को संभालने का सबसे अच्छा तरीका क्या है।

क्या मैं कर रहा हूँ है:

$(document).ready(function() { 
     $.ajaxSetup({ 
      error: function(x, e) { 

       if (x.status == 0) { 
        alert(' Check Your Network.'); 
       } 
        else if (x.status == 404) { 
       alert('Requested URL not found.'); 

       } else if (x.status == 500) { 
        alert('Internel Server Error.'); 
       } else { 
        alert('Unknow Error.\n' + x.responseText); 
       } 
      } 
     }); 

     $.get("HTMLPage.htm", function(data) { 
      alert(data); 
      $('#mydiv').html(data); 

     }); 
    }); 

यह काम कर रहा है ठीक है.पर जानना चाहता हूँ वहाँ ऐसा करने का किसी भी बेहतर तरीका है?

रेफरी: http://www.maheshchari.com/jquery-ajax-error-handling/

+0

यह मेरे लिए एक सभ्य AJAX त्रुटि हैंडलिंग है। – RaYell

+1

बेहतर परिभाषित करें? आपके मौजूदा कोड में क्या गलत है जिसे आप सुधारना चाहते हैं? –

+0

यदि आप अपना कोड सुधारना चाहते हैं, तो आप अलर्ट का उपयोग करना बंद कर सकते हैं और उन फ़ंक्शंस का उपयोग कर सकते हैं जो कुछ और उपयोगकर्ता के अनुकूल हैं। आप वास्तव में केवल एक ही हैं जो इस त्रुटि की जानकारी देखना चाहता है। आप कहीं भी एक मॉडल स्क्रीन या थोड़ा टेक्स्टबॉक्स दिखा सकते हैं, उपयोगकर्ता को बता रहा है कि एक त्रुटि हुई है। –

उत्तर

15

$ .ajaxSetup का उपयोग करते हुए सभी ajax कॉल के लिए वैश्विक है। क्योंकि $ .get फ़ंक्शन में कोई त्रुटि कॉलबैक नहीं है, $ .ajaxSetup में त्रुटि हैंडलर को परिभाषित करना त्रुटियों को संभालने का एकमात्र तरीका है। आप $ .ajax उपयोग करते हैं, आपको लगता है कि जिस तरह से आप अधिक विशिष्ट त्रुटि संदेश हो सकता है इस

$.ajax({ 
    url: "HTMLPage.htm", 
    success: function(data) { 
    alert(data); 
    $('#mydiv').html(data);   
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
    if (XMLHttpRequest.status == 0) { 
     alert(' Check Your Network.'); 
    } else if (XMLHttpRequest.status == 404) { 
     alert('Requested URL not found.'); 
    } else if (XMLHttpRequest.status == 500) { 
     alert('Internel Server Error.'); 
    } else { 
     alert('Unknow Error.\n' + XMLHttpRequest.responseText); 
    }  
    } 
}); 

तरह $ .ajax कॉल में त्रुटि हैंडलर परिभाषित कर सकते हैं यह केवल इस ajax कॉल के लिए विशिष्ट है,। लेकिन वैश्विक त्रुटि हैंडलर का उपयोग करना भी काम करता है।

आप http://api.jquery.com/jQuery.ajax/ से $ (document) .ready() इस

$(document).ready(function() { 
    $.ajaxSetup({ 
     error: AjaxError 
    }); 

    $.get("HTMLPage.htm", GetSuccess); 
}); 

function AjaxError(x, e) { 
    if (x.status == 0) { 
    alert(' Check Your Network.'); 
    } else if (x.status == 404) { 
    alert('Requested URL not found.'); 
    } else if (x.status == 500) { 
    alert('Internel Server Error.'); 
    } else { 
    alert('Unknow Error.\n' + x.responseText); 
    } 
} 

function GetSuccess(data) { 
    alert(data); 
    $('#mydiv').html(data); 
} 
+1

इस प्रश्न के लिए इतनी बड़ी प्रतिक्रिया लिखने के लिए धन्यवाद! मैंने विशेष रूप से $ .ajaxSetup() कॉल के बाहर फ़ंक्शन परिभाषाओं को स्थानांतरित करने के बारे में युक्ति की सराहना की। – Steph

1

कॉपी/पेस्ट की तरह के बाहर अपने कार्यों को परिभाषित कर सकते हैं:

statusCode (1.5 जोड़ा) {}
प्रतिक्रिया में संबंधित कोड होने पर संख्यात्मक HTTP कोड और कार्यों का नक्शा कहा जाता है। उदाहरण के लिए, निम्नलिखित सूचित करेंगे तब होता है जब प्रतिसाद स्थिति 404:

$.ajax({ 
    statusCode: {404: function() { 
    alert('page not found'); 
    } 
}); 

अनुरोध सफल होता है, स्थिति कोड कार्यों सफलता कॉलबैक के रूप में ही पैरामीटर पर ध्यान; यदि इसके परिणामस्वरूप कोई त्रुटि आती है, तो वे त्रुटि कॉलबैक के समान पैरामीटर लेते हैं।

+0

यह मेरे लिए काम नहीं करता है, कॉल '$ .ajaxSetup' है तो' {statusCode: ...} 'आदि। – Diziet

0

jQuery 1.5 के अनुसार, jQuery की सभी अजाक्स विधियां XMLHTTPRequest ऑब्जेक्ट का सुपरसैट लौटाती हैं। यह jQuery XHR ऑब्जेक्ट, या "jqXHR," $ .get() द्वारा लौटाया गया वादा इंटरफेस लागू करता है, जो इसे सभी गुणों, विधियों और वादे के व्यवहार को देता है।

var jqxhr = $.get("example.php", function() { 
    alert("success"); 
}) 
.done(function() { 
    alert("second success"); 
}) 
.fail(function() { 
    alert("error"); 
}) 
.always(function() { 
    alert("finished"); 
});