2010-07-02 31 views
8

ऐसा लगता है कि सफलता, त्रुटि, और पूर्ण कॉलबैक केवल आग लगती है जब AJAX अनुरोध सर्वर से कुछ प्रतिक्रिया प्राप्त करने में सक्षम होता है।एक jQuery AJAX अनुरोध की स्थिति की स्थिति

तो अगर मैं सर्वर शट डाउन निम्न त्रुटि कॉलबैक निष्पादित नहीं है और अनुरोध चुपचाप विफल रहता है।

$.ajax({ 
    type: "GET", 
    url: "http://localhost:3000/", 
    dataType: "script", 
    success: function() { 
    alert("success"); 
    }, 
    error: function() { 
    alert("error"); 
    } 
}); 

सर्वर पर पहुंचने पर त्रुटि को फेंकने का सबसे अच्छा तरीका क्या है।

संपादित करें - मैं क्या करने की कोशिश की और पढ़ा है यह प्रतीत होता है कि से jQuery के त्रुटि हैंडलिंग में बनाया JSONP, या डेटाप्रकार साथ काम नहीं करता: "स्क्रिप्ट"। तो मैं मैन्युअल टाइमआउट सेट करने का प्रयास करने जा रहा हूं।

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

एक विकल्प नहीं है - jQuery-jsonp प्लगइन है, लेकिन यह छिपा iframes जो मैं नहीं बल्कि बचने चाहते हैं का उपयोग करता है। तो मैं नीचे सुझाए गए मैन्युअल टाइमआउट बनाने पर बस गया हूं। यदि अनुरोध समाप्त हो जाता है, तो आप अनुरोध को निरस्त नहीं कर सकते हैं, जिसका अर्थ है कि स्क्रिप्ट टाइमआउट के बाद भी लोड हो सकती है, लेकिन यदि सर्वर अनुपलब्ध है तो कम से कम कुछ आग लग जाएगी।

+0

jQuery के AJAX में अंतर्निहित त्रुटि प्रबंधन है (नीचे मेरा उत्तर देखें) आप इन विकल्पों को लागू करने के लिए AJAXsetup का उपयोग कर सकते हैं। – Sphvn

उत्तर

7

आप setTimeout का उपयोग कर सकते हैं, और इसे पूरे हैंडलर में clearTimeout के साथ साफ़ करें।

var reqTimeout = setTimeout(function() 
{ 
    alert("Request timed out."); 
}, 5000); 
var xhr = $.ajax({ 
    type: "GET", 
    url: "http://localhost:3000/", 
    dataType: "script", 
    success: function() { 
    alert("success"); 
    }, 
    error: function() { 
    alert("error");   
    }, 
    complete: function() { 
    clearTimeout(reqTimeout); 
    } 
}); 
+0

ऐसा लगता है कि यह एकमात्र समाधान है। Xhr.abort() को छोड़कर, अब तक अच्छी तरह से काम करना। फायरबग एक त्रुटि देता है कि xhr अपरिभाषित है। –

0

यदि मुझे सही याद है, तो jQuery अपवाद फेंकता है। इस प्रकार, आप try { ... } catch() { ... } के साथ काम करने में सक्षम होना चाहिए और इसे वहां संभाल लें।

5

jQuery.ajax पहले से ही एक timeout वरीयता है और यह अपने त्रुटि हैंडलर अनुरोध समय बाहर करना चाहिए फोन करना चाहिए। the fantastic documentation जो कहते हैं की जाँच करें - मैं इसे यहाँ उद्धृत करना चाहते हैं, जोर मेरा:

timeoutNumber

सेट एक स्थानीय समय समाप्त (मिलीसेकेंड में) अनुरोध के लिए ...

और:

error (XMLHttpRequest, textStatus, errorThrown) Function

एक समारोह अगर अनुरोध विफल रहता है तो बुलाया जाएगा। फ़ंक्शन तीन तर्क पारित किया गया है: XMLHttpRequest ऑब्जेक्ट, एक स्ट्रिंग जो त्रुटि हुई है और एक वैकल्पिक अपवाद ऑब्जेक्ट का वर्णन करता है, यदि कोई हुआ। दूसरे तर्क (शून्य के अलावा) के संभावित मूल्य "टाइमआउट", "त्रुटि", "नोटमोडाइफाइड" और "पार्सररर" हैं। यह एक अजाक्स घटना है।

+0

दुर्भाग्य से डेटा के लिए न तो टाइमआउट और न ही त्रुटि कार्य टाइप: जेसनपी या स्क्रिप्ट। –

+0

मैं JSONP का उपयोग कर रहा हूं और यह ^^ काम करता है लेकिन जो भी आपकी नाव तैरता है। – Sphvn

+2

JSON-P के लिए 'jquery-jsonp' नामक एक प्रोजेक्ट आज़माएं। –

0

आप अपनी त्रुटि प्रबंधन को संभालने के लिए Jquery के AjaxSetup का उपयोग कर सकते हैं।

$.ajax({ 
    type: "GET", 
    url: "http://localhost:3000/", 
    dataType: "script", 
    success: function() { 
     alert("success"); 
    }, error: function() { 
     alert("error"); 
    } 
    //AJAX SETUP "error"// 
    $.ajaxSetup({ 
     "error": function (XMLHttpRequest, textStatus, errorThrown) { 
      alert(XMLHttpRequest + ' ' + textStatus + ' ' + errorThrown); //however you want 
     } 
    }); 
0

IE8 में, उपयोग कर सकते हैं:

success: function(data, textStatus, XMLHttpRequest) { 
    if("success"==textStatus&&XMLHttpRequest){ 
     alert("success"); 
    }else{ 
     alert("server down"); 
    } 
    } 

लेकिन यह क्रोम पर काम नहीं कर सकता है, फ़ायरफ़ॉक्स ... मैं करने की कोशिश की

1
error: function (jqXHR, textStatus, errorthrown) { 
    if (jqXHR.readyState == 0) { 
     //Network error, i.e. server stopped, timeout, connection refused, CORS, etc. 
    } 
    else if (jqXHR.readyState == 4) { 
     //HTTP error, i.e. 404 Not found, Internal Server 500, etc. 
    } 
} 

XMLHttpRequest उपयोग की readyState ajax अनुरोध की स्थिति निर्धारित करने के लिए। 'readyState' XMLHttpRequest की स्थिति रखता है।

  • 0:
  • आरंभ नहीं अनुरोध
  • 1: सर्वर कनेक्शन स्थापित
  • 2: अनुरोध प्राप्त हुआ
  • 3: प्रसंस्करण अनुरोध
  • 4: समाप्त अनुरोध और प्रतिक्रिया के लिए तैयार है
संबंधित मुद्दे