【问题标题】:Chrome browser "hangs" while executing AJAX requests in loopChrome 浏览器在循环执行 AJAX 请求时“挂起”
【发布时间】:2016-05-11 09:17:11
【问题描述】:

Chrome 浏览器不会在每次 AJAX 后刷新,它只会在循环结束执行所有 AJAX 请求时刷新。在 Firefox 中它可以正常工作,在 Chrome 调试器中也可以(逐步)。我还添加了超时,但它没有帮助。 Ajax 调用是同步的。更改为异步不会产生差异。

$("#doAllTest").click(function () {
  $(".doTest").each(function () {
    $(this).trigger('click');
  })
});

我的一个 Ajax 调用:

$("#ut2").click(function () {
    var user_id = logIn("user","user");
        $.ajax({
            type: 'POST',
            url: "/ScrummyPro/src/forms/card/includes/windows.php",
            async: false,
            data: {
                window: "update_sp",
                burned_stp: "1",
                card_id: "409"
            },
            success: function (result) {
                var msg = jQuery.parseJSON(result);
                if (msg) {
                    $("#ut2result").text("Success - Server response: " + msg);
                    $("#ut2result").attr("class", "successful");

                } else {
                    $("#ut2result").text("Operation failed - Server response: " + result);
                    $("#ut2result").attr("class", "failed");                     
                }
                  //the change (in if statement) appears after looping.
            },
            error: function (result) {
                $("#ut2result").text("Ajax Error").attr("class", "failed");              
            }
        });

        importer(2);
});

if 语句中的 DOM 变化(成功时)在循环后出现。

在调试模式下,我可以看到添加了“成功”类,但我看不到它的效果。循环后出现。

【问题讨论】:

  • 发起ajax调用的代码在哪里?
  • 你应该看看 promises。
  • $(this).trigger('click'); - 发起 AJAX 调用,我调用了很多 AJAX 调用。我可以加一个。
  • 你在 PHP 中使用 session 吗?
  • 是的,但是在 Firefox 中它可以工作...

标签: javascript ajax


【解决方案1】:

.each 功能块 chrome 浏览器,所以我改变了这个循环:

var i = 0;
var array = document.getElementsByClassName("doTest");

function execute() {
    var dothis = function ()
    {
        try {
            $(array[i]).trigger('click');
        } catch (err) {
              clearInterval(x); 
        }
        if (i == array.length) {
            clearInterval(x);
        }
        i++;
    };
    var x = setInterval(dothis, 1);
}

$("#doAllTest").click(function () {
    execute();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2021-01-10
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多