2010-10-04 66 views
1

   我正在开发一个在CakePHP中构建并在其中使用jQuery的项目。我有一个脚本,需要通过ajax请求来调用。这个请求在数据库中做了很多操作并花费了太多时间。在执行期间,它将它的状态写入一个单独的文件中,以便我可以看到脚本执行的状态。每次打开文件时都会写入执行状态,然后关闭文件,以消除文件锁定的问题。
      0123现在,当这个脚本正在进行时,我发送了另一个ajax请求,它只是读取该文件并在每20秒后定期获取内容。现在的问题是,当第一个Ajax请求忙于mysql时,任何其他的服务器请求都将停止。 Mysql创建所有这些请求的进程并将此请求置于睡眠模式。我认为它由于框架,导致每个请求框架都需要检查数据库。当第一个主要脚本完成所有其他请求时也会完成。
   有没有什么办法可以让我得到ajax的进展?纠正我,如果我错了某个地方...... !!!提前致谢。如何获取Ajax请求进度?

回答

0

我做到了。我只需要调用读取文件的脚本并从单独的php文件中发回数据。无需调用框架... !!!

0

如果您正在为您的Ajax需求使用jQuery,则可能需要查看$ .ajax方法的“async”选项。按照我看到的方式,您希望根据当前正在处理的请求显示进度。现在,这有一个缺点,它会锁定你正在做的任何事情,但它会正确地显示每个“线程”的进度。我不熟悉Cake,因为我使用Kohana。 现在,mysql把某些东西放在“睡眠”上是不太可能的,它会让它们排队。 这里没有真正的“进步”,我建议使用类似$ .ajaxStart或$ .ajaxStop(无论是在jQuery中调用的),只要从服务器获得响应,您可以隐藏进度元素。

+0

是的你是对的我只是想展示我的第一个Ajax请求的进度。这个脚本迭代超过一万条记录,我只是想向用户显示脚本正在执行的记录。在第一次请求任何其他请求后,在mysql中创建一个进程。我通过“show processlist;”进行检查命令在mysql中创建一个进程并将睡眠状态置于Command列中。我已经显示“Please wait script in progress ...”消息,但我只想向用户显示实际的进程状态。 – Nehal 2010-10-04 08:34:36