我想捕获页面上的所有 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 请求进行任何修改,所以我只能拦截所有请求的详细信息检查,停止那些不允许继续的请求。
请您参考如下方法:
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();
});
编辑:Throw hack
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!";
});
在这种情况下,这类似于“hack”。 Throw
适用于所有浏览器,副作用 是当前堆栈的中断。但要小心 alert("After Button Click");
也在当前堆栈中,并且永远不会执行,当你扔东西时。
更多关于: