我想在页面停止时捕获所有ajax请求/中止一些请求,具体取决于我们所做的一些检查。最初 jqXHR.abort(); 有效,但问题是它正在执行我们中止的所有请求的错误事件,这是我不想要的。
我创建的示例代码段如下所示。
var newajaxOptions;
$( ":button" ).on("click", function () {
var URL = "#";
$.ajax({
url: URL,
type: 'GET',
async: false,
success: function(){
alert("AJAX SUCCESS");
},
error: function(){
alert("AJAX ERROR");
}
});
});
$(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
alert("BLOCKED");
//set options to global variable so can re initiate ajax call later
newajaxOptions = ajaxOptions;
jqXHR.abort();
});
P.S作为限制,我不允许对ajax请求进行任何修改,因此我只能拦截对细节的所有请求检查,以阻止那些不允许继续进行的操作。
答案 0 :(得分:2)
jqXHR非常有帮助
if(jqXHR.aborted)
return;
和脚本:
var newajaxOptions;
$( ":button" ).on("click", function () {
var URL = "#";
$.ajax({
url: URL,
type: 'GET',
async: false,
success: function(){
alert("AJAX SUCCESS");
},
error: function(jqXHR, textStatus, errorThrown){
if(jqXHR.aborted)
return;
alert("AJAX ERROR");
}
});
});
$( document ).ajaxSend(function(event, jqXHR, ajaxOptions) {
alert("BLOCKED");
//set options to global variable so can re initiate ajax call later
newajaxOptions = ajaxOptions;
jqXHR.abort();
});
var newajaxOptions;
$( ":button" ).on("click", function () {
var URL = "#";
$.ajax({
url: URL,
type: 'GET',
async: false,
success: function(){
alert("AJAX SUCCESS");
},
error: function(jqXHR, textStatus, errorThrown){
//if(jqXHR.aborted)
// return;
alert("AJAX ERROR");
}
});
alert("After Button Click");
});
$( document ).ajaxSend(function(event, jqXHR, ajaxOptions) {
alert("BLOCKED");
throw "Your request is evil! Stop right now!";
});
在这种情况下,这就像“黑客”。 Throw
适用于所有浏览器,副作用是当前堆栈的中断。但是要小心alert("After Button Click");
也在当前堆栈中,当你扔东西时永远不会执行。
更多关于:
答案 1 :(得分:0)
您应该能够重置ajaxSend
中的错误事件$( document ).ajaxSend(function(event, jqXHR, ajaxOptions) {
alert("BLOCKED");
//set options to global variable so can re initiate ajax call later
newajaxOptions = ajaxOptions;
ajaxOptions.error = null;
jqXHR.abort();
});