我正在尝试按顺序进行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尝试返回数据。
答案 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/