2010-06-16 6 views
5

जब मैं अपना सर्वर नीचे लाता हूं और उसे AJAX अनुरोध करता हूं, तो फ़ायरबग दिखाता है कि अनुरोध करने के बाद अनुरोध को कुछ सेकंड बाद निरस्त कर दिया गया है, और मेरा success हैंडलर कॉल किया जाता है।

सफलता हैंडलर क्यों कॉल किया जाता है, क्या यह त्रुटि हैंडलर नहीं होना चाहिए? और मैं भरोसेमंद तरीके से कैसे पता लगा सकता हूं कि यह वास्तव में सफल नहीं था?

कोड:

  $.ajax({ 
       url: url, 
       type: "POST", 
       data: data, 
       dataType: "json", 
       success:function(data, statusText, xhr){ 
        //gets called on success, or even when server is down. 
       }, 
       error: function(){ 
        //called if server returns error, but not if it doesn't respond 
       } 
      }); 

अद्यतन: यह व्यवहार केवल स्थानीय होस्ट पर है, यह तब होता है जब मेरे विकास सर्वर बंद करने की। मैंने यह देखने के लिए परीक्षण किया कि जब मैं उत्पादन सर्वर तक पहुंचने का प्रयास करता हूं, लेकिन मेरे व्यक्तिगत इंटरनेट को ऑफ़लाइन ले लिया जाता है, और यह केवल लटकता है, सफलता या त्रुटि को कॉल नहीं करता है। मान लीजिए मुझे उस मामले के लिए टाइमआउट संपत्ति निर्धारित करनी चाहिए।

+1

सकारात्मक नहीं, लेकिन शायद 'abort' की प्रतिक्रिया' fail' तुलना में अलग है? क्या आप अपना कोड पोस्ट कर सकते हैं? – hookedonwinter

+0

संभावित रूप से संबंधित: http://stackoverflow.com/questions/2357147/ajax-how-to-prevent-jquery-from-calling-the-success-event-after-executing-xmlhtt –

+1

आप सर्वर को कैसे नीचे ले जाते हैं? क्या यह पूरी तरह से पहुंच योग्य नहीं है, या यह 404 पृष्ठों की सेवा करेगा? –

उत्तर

3

मुझे लगता है कि यह jQuery के 1.4.2 संस्करण में एक बग (?) है।

मैं jQuery documentation से एक टिप्पणी बोली:

1.4.2 में jQuery, ajax टाइमआउट/कनेक्शन त्रुटि पर त्रुटि कॉलबैक फोन नहीं करता है इसे ठीक करने के: अनुगामी "|| XHR को दूर .status === 0 " से httpSuccess फ़ंक्शन

यदि आप jQuery कोड को स्वयं संशोधित करना चाहते हैं तो इसे बनाएं।

$.ajax({ 
    type: "POST", 
    url: "http://madeUpServerthatdoesnotExist.com/index.php", 
    data: "id=1", 
    success: function(msg){ 
    if(this.xhr().status === 0){ 
      errorHandler(); 
    } 
    else { 
      alert('Success'); 
    } 
    }, 
    error: errorHandler 
}); 

function errorHandler(){ 
      alert('Freakin error'); 
} 

यह मुश्किल हो रहा है, टिप्पणी कृपया एक बेहतर तरीका के बारे में यदि आप जानते हैं: और आप की तरह मैं यहाँ कर अपनी सफलता कॉलबैक में यह जाँच कर सकते हैं!

संपादित करें: शोध करने के बाद, मुझे यकीन है कि यह, jQuery में एक बग हो सकता है के रूप में जल्द जवाब अद्यतन करेगा के रूप में मैं एक सुराग

+0

यह काम करता प्रतीत होता है – Kyle

2

ऐसा लग रहा है इस बग jQuery 1.4 में तय किया गया था प्राप्त नहीं कर रहा हूँ .3:

http://bugs.jquery.com/ticket/6060

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