ajax调用挂在jquery中

时间:2013-12-18 16:24:23

标签: 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);
    }
    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尝试返回数据。

2 个答案:

答案 0 :(得分:0)

如果您想要发出顺序请求,请尝试

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循环阻塞了浏览器线程

答案 1 :(得分:0)

由于同时存在会话阻塞ajax调用和那些锁定会话文件的问题,您面临会话挂起问题。

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

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

这里有更多细节。 https://ma.ttias.be/php-session-locking-prevent-sessions-blocking-in-requests/