Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 停止/中止Ajax请求而不触发错误_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 停止/中止Ajax请求而不触发错误

Javascript 停止/中止Ajax请求而不触发错误,javascript,jquery,ajax,Javascript,Jquery,Ajax,我想捕获页面上的所有ajax请求,根据我们所做的一些检查停止/中止一些请求。最初jqXHR.abort()可以工作,但问题是它正在执行我们中止的所有请求的错误事件,我不希望这样 下面是我创建的示例片段 var newajaxOptions; $( ":button" ).on("click", function () { var URL = "#"; $.ajax({ url: URL, type: 'GET', async: fa

我想捕获页面上的所有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();
});

另外,作为一个限制,我不允许对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
在每个浏览器中都有效,的副作用是当前堆栈的中断。但要小心
警报(“点击按钮后”)
也在当前堆栈中,当您抛出某些内容时,它将永远不会执行

更多关于:


您应该能够在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();
});

谢谢Krzysiek的回答。不过,我有一点进退两难,我们不允许手动更改ajax调用上的代码,有没有办法在ajaxSend方法中动态添加if语句?尝试了更改后,ajax请求的错误函数仍然被触发。P.S我无法添加if(jqXHR.aborted)返回;对于ajax请求,正如在实际设置中一样,由于一些限制,我们无法触及$.ajax(),这就是为什么我们使用ajaxSendMaybe
throw'stop!'捕获ajax请求的原因而是中止?一个问题,将抛出“停止!”;跨不同的浏览器工作?
$( 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();
});