Fre*_*sky 1 php ajax progress-bar
我有一个经过验证然后使用以下处理程序提交的表单:
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);
})();
}
Run Code Online (Sandbox Code Playgroud)
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)...
...
Run Code Online (Sandbox Code Playgroud)
但在完成之前都不会get_progress.php返回任何值。long_process.php
如何实现同时多个ajax请求?最终这将用于显示进度条。
小智 6
如果您在 PHP 中使用会话,则一个调用将阻止另一个调用,因为 PHP 不允许两个请求同时使用同一会话空间。您的两个请求可能正在触发,但在服务器完成第一个请求之前,您不会收到第二个请求。
为了解决这个问题:
选项 1:不要在您调用的第一个脚本中使用会话,或者如果必须的话,使用 session_write_close() 解锁会话。当然,调用这个之后,你就不能写入任何会话变量了。
选项 2:如果读取和写入会话变量是必需的,则不要在第二个 AJAX 调用中使用会话变量,也不要声明会话开始。让您的第一个脚本将其状态放在其他地方供您读取(在数据库中,/tmp 上的文件),然后让第二个脚本从那里读取状态。
希望有帮助!
| 归档时间: |
|
| 查看次数: |
3731 次 |
| 最近记录: |