से कॉलबैक संलग्न हैं I अस्थायी कारणों से विफल होने वाले AJAX अनुरोधों को पुनः प्रयास करने की एक प्रणाली को लागू करने का प्रयास कर रहा हूं। मेरे मामले में, यह उन अनुरोधों को पुनः प्रयास करने के बारे में है जो 401 स्थिति कोड के साथ विफल रहे क्योंकि सत्र को समाप्त करने के बाद सत्र को समाप्त करने के बाद सत्र समाप्त हो गया है।एक jquery AJAX अनुरोध का पुनः प्रयास करें जिसमें इसके स्थगित
समस्या यह है कि "सफलता" AJAX विकल्प कॉलबैक के विपरीत, "पूर्ण" कॉलबैक को एक सफल पुनः प्रयास पर नहीं कहा जाता है। किया शैली कॉलबैक एक सफल पुन: प्रयास पर कहा जाता है के लिए
$.ajaxSetup({statusCode: {
404: function() {
this.url = '/existent_url';
$.ajax(this);
}
}});
$.ajax({
url: '/inexistent_url',
success: function() { alert('success'); }
})
.done(function() {
alert('done');
});
वहाँ एक रास्ता है: मैं नीचे एक सरल उदाहरण बना हुआ है? मुझे पता है कि स्थगित 'अस्वीकार' के बाद 'हल' किया जा सकता है, क्या यह अस्वीकार करना संभव है? या हो सकता है कि मूल स्थगित किए गए मूल की प्रतिलिपि को एक नए स्थगित कर दें? मैं विचारों से बाहर हूं :)
नीचे एक और यथार्थवादी उदाहरण, जहां मैं सभी 401-अस्वीकृत अनुरोधों को कतारबद्ध करने का प्रयास कर रहा हूं, और सफल कॉल/रीफ्रेश के बाद उन्हें पुनः प्रयास कर रहा हूं।
var refreshRequest = null,
waitingRequests = null;
var expiredTokenHandler = function(xhr, textStatus, errorThrown) {
//only the first rejected request will fire up the /refresh call
if(!refreshRequest) {
waitingRequests = $.Deferred();
refreshRequest = $.ajax({
url: '/refresh',
success: function(data) {
// session refreshed, good
refreshRequest = null;
waitingRequests.resolve();
},
error: function(data) {
// session can't be saved
waitingRequests.reject();
alert('Your session has expired. Sorry.');
}
});
}
// put the current request into the waiting queue
(function(request) {
waitingRequests.done(function() {
// retry the request
$.ajax(request);
});
})(this);
}
$.ajaxSetup({statusCode: {
401: expiredTokenHandler
}});
तंत्र काम करता है, 401-असफल अनुरोध को दूसरी बार निकाल दिया, समस्या उनकी 'पूर्ण' कॉलबैक कहा जाता है नहीं मिलता है, तो अनुप्रयोगों स्टालों।
एक एकल पृष्ठ एप्लिकेशन को लागू करते समय एक ही समस्या होने पर जो लॉगिन संवाद को ट्रिगर करने के लिए 401 का उपयोग करता है। मैंने स्रोत को देखा है और मुझे लगता है कि डिफर्रेड के साथ ऐसा करना असंभव है क्योंकि वे बहुत जल्दी हल हो जाते हैं। –
http://jsfiddle.net/8AgEj/ यह मेरे लिए काम कर रहा है ... सही समस्या क्या है? –
संभव डुप्लिकेट [jQuery का उपयोग कर विफलता पर AJAX अनुरोध को पुनः प्रयास करने का सबसे अच्छा तरीका क्या है?] (Http://stackoverflow.com/questions/10024469/whats-the-best-way-to-retry-an-ajax-request -ऑन-विफलता-उपयोग-jquery) – user2284570