两个同时的AJAX请求不会并行运行

我同时运行两个AJAX请求时遇到问题。我有一个PHP脚本正在将数据导出到XSLX。此操作需要很多时间,因此我尝试向用户显示进度。我正在使用AJAX和数据库方法。实际上,我非常确定它曾经可以工作,但是我不知道为什么,它不再在任何浏览器中都能工作。新浏览器有什么变化吗?

$(document).ready(function() {

$("#progressbar").progressbar();

$.ajax({

type: "POST",

url: "{$BASE_URL}/export/project/ajaxExport",

data: "type={$type}&progressUid={$progressUid}" // unique ID I'm using to track progress from database

}).done(function(data) {

$("#progressbar-box").hide();

clearInterval(progressInterval);

});

progressInterval = setInterval(function() {

$.ajax({

type: "POST",

url: "{$BASE_URL}/ajax/progressShow",

data: "statusId={$progressUid}" // the same uinque ID

}).done(function(data) {

data = jQuery.parseJSON(data);

$("#progressbar").progressbar({ value: parseInt(data.progress) });

if (data.title) { $("#progressbar-title").text(data.title); }

});

}, 500);

});

  • 在数据库中正确更新进度
  • JS计时器正在尝试获取进度,我可以在控制台中看到它,但是所有这些请求都加载第一个脚本的整个持续时间,一旦脚本结束,这些ajax进度调用就会加载

那么,为什么第二个AJAX调用等待第一个完成呢?

回答:

听起来像是会话阻止问题

默认情况下,PHP将其会话数据写入文件。当您使用session_start()启动会话时,它将打开文件进行写入并锁定该文件以防止并发编辑。这意味着对于每个使用会话通过PHP脚本的请求,都必须等待该文件完成第一个会话。

解决此问题的方法是将PHP会话更改为不使用文件或关闭会话写,如下所示:

<?php

session_start(); // starting the session

$_SESSION['foo'] = 'bar'; // Write data to the session if you want to

session_write_close(); // close the session file and release the lock

echo $_SESSION['foo']; // You can still read from the session.

以上是 两个同时的AJAX请求不会并行运行 的全部内容, 来源链接: utcz.com/qa/418928.html

回到顶部