我正在使用PHP+Ajax开发一个网站。我必须触发一个ajax请求,可能需要很长时间来处理(大约5分钟),我不需要这个请求的任何响应,所以用户应该可以自由地导航到我的网站,而服务器在后台执行这个ajax请求。
我代码: //I can easly lunch the ajax request
$.ajax({
type: 'GET',
url: "myurl.php",
async: true,
success: function (data) {}
});
这个脚本工作得很好,但正如所说的,它需要几分钟才能完成,在这个时候,用户不能打开我的域的任何页面。看起来我的浏览器正在等待响应。
目前要"解锁"我的浏览器,我有以下解决方案:
-restart my web server
-重启浏览器
-等待直到脚本完成
有一个技巧或东西火"鬼"ajax请求?
(ghost表示我不想等待响应)
我试图触发请求,然后调用abort()函数,但它中止了所有的请求以及PHP脚本的执行。
提示吗?
p。我在Firefox 8、Chrome 15.0和IE9上进行了测试
如果你在后台脚本中使用会话,当你完成处理会话变量时,你应该调用session_write_close
,因为一个会话不能在任何给定的时间被多个脚本打开。
您可以使用不同的方法,例如使用简单的queue:
- 发送请求到服务器做一些工作,将其保存到数据库(与需要做的指示)添加标记为ex完成= 0
- 每5分钟在服务器上创建一个cron作业,(lockrun问题)
- Cron作业运行并检查数据库中是否有未完成的任务,并逐一运行
- 标记为已完成= 1.
- 然后,您可以通过标志(和prob userID)查找任务是否完成,并通知用户任务完成。
这样用户可以浏览你的网站没有问题,你甚至可以提供进度给用户完成了多少,如果你需要它,通过在过程中更新数据库。