多个 ajax 同时请求
Multiple ajax requests at the same time
我有一个经过验证的表单,然后使用以下处理程序提交:
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
return 的 none 任何值,直到 long_process.php
完成。
如何同时实现多个 ajax 请求?最终这将用于显示进度条。
如果您在 PHP 中使用会话,那么一个调用将阻止另一个调用,因为 PHP 不允许两个请求使用相同的会话 space同时。您的两个请求可能正在触发,但在服务器完成第一个请求之前您不会收到对第二个请求的请求。
解决这个问题:
选项 1:不要在您调用的第一个脚本中使用会话,或者,如果必须,则使用 session_write_close() 解锁会话。调用这个之后当然不能再写任何session变量了
选项 2:如果读取和写入会话变量必不可少,则不要在第二个 AJAX 调用中使用会话变量,也不要声明会话开始。让你的第一个脚本把它的状态放在其他地方供你阅读(在数据库中,/tmp 上的文件),然后让第二个脚本从那里读取状态。
希望对您有所帮助!
我有一个经过验证的表单,然后使用以下处理程序提交:
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
return 的 none 任何值,直到 long_process.php
完成。
如何同时实现多个 ajax 请求?最终这将用于显示进度条。
如果您在 PHP 中使用会话,那么一个调用将阻止另一个调用,因为 PHP 不允许两个请求使用相同的会话 space同时。您的两个请求可能正在触发,但在服务器完成第一个请求之前您不会收到对第二个请求的请求。
解决这个问题:
选项 1:不要在您调用的第一个脚本中使用会话,或者,如果必须,则使用 session_write_close() 解锁会话。调用这个之后当然不能再写任何session变量了
选项 2:如果读取和写入会话变量必不可少,则不要在第二个 AJAX 调用中使用会话变量,也不要声明会话开始。让你的第一个脚本把它的状态放在其他地方供你阅读(在数据库中,/tmp 上的文件),然后让第二个脚本从那里读取状态。
希望对您有所帮助!