2015-04-02 11 views
14

मैं जावास्क्रिप्ट इस तरह है:कैसे संभाल करने के लिए शुद्ध :: jQuery ajax में ERR_CONNECTION_REFUSED

$.ajax({ 
    url: "//myapi.com/json", 
    dataType: "jsonp" 
}).done(function (data) { 
    selectText('Id', data.country); 
}).fail(function (jqXHR, textStatus, errorThrown) { 
    var defaultOption = 'US' 
    selectDropdownByText('Id', defaultOption); 

    console.log(errorThrown); 
}); 

लेकिन बात यह है कि HTTPS अनुरोध पर मेरे ajax काम नहीं कर रहा है क्योंकि सेवा मैं बोल रहा हूँ के माध्यम से सुलभ नहीं है https और मुझे त्रुटि :ERR_CONNECTION_REFUSED मिल रही है - तो यह ठीक है, मैं बस इसे संभालना चाहता हूं। मेरे पास AJAX कॉल में .fail है, लेकिन यह :ERR_CONNECTION_REFUSED को संभालने वाला नहीं है। क्या आप इस मामले में :ERR_CONNECTION_REFUSED को संभालने के तरीके पर सलाह दे सकते हैं?

मैं भी अपने AJAX कॉल को try-catch ब्लॉक पर लपेटने की कोशिश कर रहा था, लेकिन यह या तो काम नहीं कर रहा था।

+0

क्या आपने .fail की बजाय आतंक संपत्ति की कोशिश की है? –

+0

त्रुटि कॉलबैक – mohamedrias

+0

@RickHoving को ट्रिगर करने के लिए AJAX विकल्पों में 'टाइमआउट' प्रॉपर्टी का उपयोग करने का प्रयास करें। उस मामले के लिए 'आतंक' गोलीबारी नहीं कर रही है। – sreginogemoh

उत्तर

6

error कॉलबैक को आग लगाने के लिए $.ajax की timeout संपत्ति का उपयोग कर सकते हैं।

यह सुनिश्चित करेगा कि error कॉलबैक निकाल दिया गया है यदि सर्वर किसी विशेष समय सीमा के भीतर प्रतिक्रिया नहीं देता है।

$.ajax({ 
    url: "//myapi.com/json", 
    dataType: "jsonp", 
    timeout: 15000 // adjust the limit. currently its 15 seconds 
}).done(function (data) { 
    selectText('Id', data.country); 
}).fail(function (jqXHR, textStatus, errorThrown) { 
    var defaultOption = 'US' 
    selectDropdownByText('Id', defaultOption); 

    console.log(errorThrown); 
}); 

यह fail कॉलबैक ट्रिगर करेगा जब कोई इंटरनेट भी नहीं है।

+0

तो कोई रास्ता नहीं है? क्या आपके पास कोई विचार है कि 'कोशिश-कैथ' उस युग को क्यों नहीं संभाला जा रहा है? '{$ .ajax ({...});} पकड़ें (पूर्व) {}' – sreginogemoh

+0

मैं पुष्टि कर सकता हूं कि समय-समय पर विशेषता को स्पष्ट रूप से सेट किए बिना इस तरह के मुद्दे को पकड़ने का कोई तरीका नहीं है। एक और तरीका सफलता हैंडलर में डेटा वैल्यू की जांच करना हो सकता है, और यदि यह रिक्त है तो गलती हैंडलर के समान कुछ करें: http://stackoverflow.com/a/6792515/615924 – rikpg

+1

मेरे मामले में टाइमआउट को अभी भी ' नेट :: ERR_CONNECTION_REFUSED' और 'विफल' नहीं चल रहा है। क्या कोई अन्य शर्त है जिसे पूरा करने की आवश्यकता है? – dlsso

0

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

कनेक्शन अस्वीकृत विफलताओं को संभालने के लिए आपको टाइमआउट सेट करने की आवश्यकता नहीं है।

+0

यदि आप टाइमआउट के लिए "असफल" हैं, तो फ़ंक्शन का "त्रुटि" पैरामीटर "टाइमआउट" होगा और "त्रुटि" नहीं होगा – Claudio

1

ऐसा प्रतीत होता है कि जब jqXHR.readyState (यानी, $ .ajax (...) के पहले पैरामीटर के readyState फ़ील्ड। विफल() विधि) 0 है कि नेटवर्क त्रुटि आई है। हालांकि, मैं यह पता लगाने में सक्षम नहीं हूं कि जावास्क्रिप्ट के माध्यम से सटीक नेटवर्क त्रुटि क्या है।

मैंने jQuery अजाक्स कोड, और xhr.send() (यानी, XMLHttpRequest.send()) विधि (जो नेटवर्क त्रुटि उत्पन्न करता है) को देखा है और त्रुटि को फेंक नहीं देता है। इस प्रकार, इसे पकड़ना संभव नहीं है।

ऐसा प्रतीत होता है कि ब्राउज़र सही त्रुटि संदेश का पता लगाता है और प्रदर्शित करता है लेकिन यह jQuery विशिष्ट प्रकार की नेटवर्क त्रुटि के लिए अनजान है।

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