问题
我有一个长时间运行的导入作业,我用ajax请求启动它,可能需要几分钟才能完成请求。当第一个ajax请求正在运行时,我想查看服务器以知道导入的进度,这个第二个请求将每2秒钟左右完成一次。
当我使用Ext.Ajax
方法时,请求似乎被链接在一起 - 第一个ajax请求(导入)一直运行到完成,然后才触发第二个(导入更新)。
我看到Ext.Ajax
是单例的,所以可能这就是原因。所以我尝试用Ext.create('Ext.data.Connection')
创建自己的连接对象,但它不起作用。
当前请求链是:
- 第一个请求-开始
- 第一个请求-结束
- 第二个请求-开始
- 第二个请求-结束
但是它应该是:
- 第一个请求-开始
- 第二个请求-开始
- 第二个请求-结束
- ...可能会有更多的第二个请求
- 第一个请求-结束
问题
浏览器应该能够处理多个请求,但在ExtJS中必须有限制,但我没有找到它在哪里?
更新2011-10-16
答案
问题不在于ExtJS - 对不起!这是PHP的问题,我的第一个脚本使用会话,第二个脚本也试图访问会话。因为PHP会话是基于文件的,所以第一个请求脚本锁定了会话文件,第二个请求脚本必须等待第一个释放会话锁。
我通过在导入过程中(第一个脚本)添加以下代码来解决这个问题:
$id = session_id();
session_write_close();
sleep(1);
session_start($id);
所以它停止并重新加载会话,另一个脚本能够钩入并获取会话信息。