ajax:不要等待回复,而是定期检查

时间:2010-03-22 14:51:37

标签: php jquery ajax-polling

我有一个需要很长时间才能运行的PHP进程。我不希望调用它的AJAX进程等待它完成。当PHP进程完成时,它将在数据库中设置一个字段。应该有某种AJAX轮询调用来定期检查数据库字段并设置消息。

如何设置jQuery AJAX调用而不是等待? PHP脚本是否必须执行任何特殊操作?

4 个答案:

答案 0 :(得分:2)

更容易进行服务器端操作,只需响应否定响应,直到值准备就绪,并设置客户端重复轮询(使用setTimeout()),直到收到肯定响应或固定数字为止观察到失败。

 var timer;
 var count = 0;
 function poll(url) {
      timer = setTimeout(function() {
          $.ajax({
              url: url,
              success: function(data) {
                  if (data.Status) {
                      ...do something...
                  }
                  else {
                     if (++count > 10) {
                       ...failure action...
                     }
                     else {
                         poll(url);
                     }
                  }
              ...other options...
           })
      },5000)
 }

然后在服务器端使用一些(伪代码)......

 if operation is not complete
     return serialize( { Status : false } )
 else
     data = ....
     data.Status = true
     return serialize(data)
 end

答案 1 :(得分:2)

第1步:第一次调用长时间运行的进程 - 设置ignore_user_abort(true);在PHP脚本中需要很长时间并关闭连接。

第2步:检查数据库字段是否使用建议的方法更新。

答案 2 :(得分:0)

一个快速的解决方法是创建另一个PHP脚本,您可以调用它来检查它,因为直接通过AJAX的comm方法访问DB并不是一个好习惯。

  1. 创建一个PHP文件,需要进行数据库检查。
  2. 这样做会发布'T'或'F'或类似的东西
  3. 创建SetInterval('yourfunctionname',100),以便您可以调用轮询脚本。
  4. 如果该轮询的答案为“T”,请拨打其他长时间脚本。

答案 3 :(得分:0)

你的意思是通常的民意调查(而不是长期民意调查)?如果是,也许这会有所帮助:http://jquery-howto.blogspot.com/2009/04/ajax-update-content-every-x-seconds.html

PHP脚本只检查数据库字段,并立即返回true / false。