Javascript jquery中的ajax调用挂起

Javascript jquery中的ajax调用挂起,javascript,jquery,Javascript,Jquery,我试图按顺序进行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);

我试图按顺序进行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';
        });
    }
}

在chrome网络中,第一个请求永远处于挂起状态,因此一切都挂起。但是manuall try返回数据。

如果要进行顺序请求,请尝试以下操作

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函数来解决此处所述的问题

这也将提高性能,同时进行本演示中所示的ajax调用


这里有更多的细节

你有一个无限循环。Ajax回调永远无法执行,因为循环不会终止。因此,flagArray[i]不能设置为“完成”,并且i不会增加。您希望按顺序执行Ajax调用的具体原因是什么?为什么不并行运行它们呢?是的,先生,因为这将创建我的页面,并且依赖于从第一页到下一页。下一步将只附加在第一个的底部id上,这是他们的html。。。你忘了在回调中调用请求了吗?实际上它需要被阻止。。。因为这将首先创建一个页面,其余的代码将在该页面上运行。@user3115998这是一个非常糟糕的主意。。。更好的解决方案是使用类似面板的加载消息来阻止ui
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)