簡體   English   中英

停止/中止Ajax請求而不會觸發錯誤

[英]Stop / Abort Ajax Request without triggering error

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

PS作為一個限制,我不允許對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();
});

編輯: 扔黑客

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"); 當你扔東西時,它也處於當前堆棧中並且永遠不會執行。

更多關於:

throw聲明

使用try...catch錯誤處理

您應該能夠重置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();
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM