簡體   English   中英

jQuery在頁面卸載時打破每個循環

[英]jQuery break an each loop on page unload

我有一個jQuery每個循環都有一個ajax函數,但是當我在循環仍在運行時試圖離開這個頁面時我遇到了一個問題,基本上我無法導航到任何其他頁面,除非每個循環都已完成。

我不需要這個循環來完成,因為它基本上只需要作為一個視覺指示器,它遠沒有犧牲用戶體驗那么重要。

    $.each( get_link, function( i, val ) {

    $(window).on("beforeunload", function() {
        return false;
    });

    $.ajax({
        type: "POST",
        url: url,
        async: true,
        data: {url: val},
        success: function(data)
        {
            let row = $("#status[data-url='" + val + "']");
            row.html(data);
            $("#loader[data-url='" + val + "']").removeClass("loader vertical-align-middle loader-bounce");
        }
    });
});

你可以看到我試圖用$(window).on("beforeunload")修復它,但beforeunload創建了一個不必要的警報窗口,遺憾的是我找不到禁用的方法。

編輯:上面的代碼也沒有破壞循環...

beforeunload一個好主意? 也許有更好的方法來打破頁面退出循環?

f.khantsis建議中止ajax操作,這是一個好主意,但它沒有幫助,因為我在5-6個鍵的數組上運行每個循環。 因此,如果其中一個被中止,則循環繼續運行所有剩余的鍵。

請參閱使用jQuery中止Ajax請求

基本上, jQuery.ajax返回一個jqXHR對象,該對象可用於中止掛起的請求。

$.each( get_link, function( i, val ) {

    var xhr = $.ajax({
      type: "POST",
      url: url,
      async: true,
      data: {url: val},
      success: function(data)
      {
          let row = $("#status[data-url='" + val + "']");
          row.html(data);
          $("#loader[data-url='" + val + "']").removeClass("loader vertical-align-middle loader-bounce");
      }
    });
    $(window).on("beforeunload", function() {
      xhr.abort();
    });
});

$(window).on("beforeunload")應該在你的循環之外。

然后它可以設置一個全局變量,然后在循環中檢查它,例如:

var leavingThePage = false;

$(window).on("beforeunload", function() {
        leavingThePage = true;
});

$.each( get_link, function( i, val ) {
    if (leavingThePage)
        return false;

    $.ajax({
      ... Do ajax stuff ...
    });
});

暫無
暫無

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

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