我正在使用CakePHP在一个应用程序上,该应用程序必须通过单个AJAX调用运行一个耗时的任务,并且辅助定期AJAX调用检查任务的进度。
问题
虽然耗时的任务(大约需要30秒)通过它向CakePHP的AJAX请求运行,但辅助进度AJAX请求似乎无法“阻塞”。
为了澄清,辅助进度AJAX请求不会返回任何错误,它只是在原始耗时的请求完成之前不会返回任何响应。
一旦原始AJAX请求完成,辅助进度AJAX请求将按预期返回。
似乎执行进度请求正在排队,直到第一个AJAX调用结束,因为返回的进度是100%。
我尝试过什么
我尝试了多种建议的解决方案,包括:
任何想法?
所以似乎问题是由CakePHP引起的 - 有没有人在他们自己的CakePHP应用程序中体验过这个?
谢谢!
答案 0 :(得分:3)
会话处理设置为php中的文件
来自php.ini
[Session]
; Handler used to store/retrieve data.
; http://php.net/session.save-handler
session.save_handler = files
这可以防止php为每个用户运行多个会话实例。
为了防止这种情况在你的PHP代码中运行:
session_write_close();
只知道会话现已关闭,因此写入会话不再是一个选项。
答案 1 :(得分:0)
为了澄清一下,你是使用内置的AJAX助手(在原型上)还是使用像jQuery这样的外部库?
通常,选择的javascript库有{async: true}
可用于强制并发。见这个例子:
$.ajax({
type: 'GET',
url: '/fetch.php',
async: true,
success: function(data, status) {
$('#status').html(status);
}
});
对于内置的CakePHP AJAX助手,此选项应该可以解决问题:$options['type']
。更多信息here。请注意,从版本1.3开始不推荐使用AJAX帮助程序,jsHelper应该能够接管,例如,请参阅request()
方法here(也有一个名为async
的选项)。 / p>