gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:30:40 25 4
gpt4 key购买 nike

我在同时运行两个 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 调用要等待第一个 AJAX 调用完成?

最佳答案

听起来像是 session 阻塞问题

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

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

<?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.

关于php - 两个同时 AJAX 请求不会并行运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15686572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com