Ajax 调用挂起在 jQuery 中

ajax call hanging in jquery

本文关键字:jQuery 挂起 调用 Ajax      更新时间:2023-09-26

我正在尝试按顺序进行 ajax 调用,然后应用车把将它们附加到主 html 文件中。 但是我下面的代码仅在第一个请求中挂起。 当我手动尝试此 URL 时,它会返回 HTML。 但不是当我尝试通过时。我在这里犯了任何逻辑错误。

var i = 0;
var flagArray = new Array(data.length);
while (i < data.length) {
    if (flagArray[i] == 'done') {
        i++;
        console.log(i);
    }
    if (flagArray[i] != 'fired') {
        flagArray[i] = 'fired';
        $.get('commonCore/templates/' + data[i].templateHtml, function (html) {
            console.log(data[count].classSelect, i);
            var filterTemplate = Handlebars.compile(html);
            replaceFilterTemplate(filterTemplate, data[i].classSelect);
            flagArray[i] = 'done';
        });
    }
}

数据是 JSON:

[
    {
        "templateHtml": "dcdcsFilterOptions.html",
        "classSelect": "dcdcsOptions"
    },
    {
        "templateHtml": "dashBoardLeftInsight.html",
        "classSelect": "leftpanel"
    },
    {
        "templateHtml": "advanceFilterOptions.html",
        "classSelect": "advancedOptions"
    },
    {
        "templateHtml": "reportFilterOptions.html",
        "classSelect": "reportdashboard"
    }
]

在 Chrome 网络中,永久显示第一个请求的待处理状态,因此一切都挂起。 但 Manuall 尝试返回数据。

如果你想发出顺序请求,试试类似

function request(array) {
    if (!array || !a.length) {
        return
    }
    var item = array.shift();
    $.get('commonCore/templates/' + item.templateHtml, function (html) {
        var filterTemplate = Handlebars.compile(html);
        replaceFilterTemplate(filterTemplate, item.classSelect);
        request(array)
    });
}
request(data)

在处理整个请求数组之前,您的代码存在问题,由于 while 循环,您正在阻塞浏览器线程

由于同时会话阻塞 ajax 调用并且这些调用正在锁定会话文件,您面临会话挂起问题。

请在返回响应之前使用 session_write_close() 函数来解决问题,如此处所述。 http://php.net/manual/en/function.session-write-close.php

这也将提高同时进行 ajax 调用时的性能,如本演示 https://demo.ma.ttias.be/demo-php-blocking-sessions/所示。

以下是这方面的更多详细信息。https://ma.ttias.be/php-session-locking-prevent-sessions-blocking-in-requests/