我想捕获页面上的所有 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"); 也在当前堆栈中,并且永远不会执行,当你扔东西时。

更多关于:

throw statement

error handling using try...catch


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!