我有一个经过验证的表单,然后使用以下处理程序提交:
submitHandler:function (form) {
$.ajax({
url: 'long_process.php',
type: 'POST',
data: $(form).serialize(),
success: function (result) {
// ... Redirect ...
}
});
//start polling
(function poll() {
setTimeout(function () {
$.ajax({
url: "get_progress.php",
success: function (data) {
console.log(data);
//Setup the next poll recursively
poll();
},
});
}, 3000);
})();
}
long_process.php
需要大约30秒才能完成,与此同时,我希望通过get_progress.php
跟踪进度,以回应处理完成的百分比。
启动此脚本时,我进入控制台(已编辑):
1 POST long_process.php
2 GET get_process.php (3 seconds later)...
...stuck here until long_process.php finishes THEN
3 GET get_process.php (3 seconds later)...
4 GET get_process.php (3 seconds later)...
...
但在get_progress.php
完成之前,long_process.php
都没有返回任何值。
如何实现多个同时ajax请求?最终,这将用于显示进度条。
答案 0 :(得分:2)
如果您在PHP中使用会话,则一次调用将阻止另一次,因为PHP不允许两个请求同时使用相同的会话空间。您的两个请求可能正在触发,但在服务器完成第一个请求之前,您没有收到第二个请求。
解决这个问题:
选项1:不要在您调用的第一个脚本中使用会话,或者如果必须,则使用session_write_close()解锁会话。当然,在调用它之后,您无法编写任何会话变量。
选项2:如果读取和写入会话变量是必不可少的,那么在第二次AJAX调用中不要使用会话变量,也不要声明会话启动。让你的第一个脚本将其状态放在其他地方供你阅读(在DB中,/ tmp上的文件),然后让第二个脚本从那里读取状态。
希望有所帮助!