2

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

如何设置 jQuery AJAX 调用来轮询而不是等待?PHP 脚本是否必须做任何特别的事情?

4

4 回答 4

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
于 2010-03-22T14:57:59.523 回答
2

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

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

于 2010-03-22T15:07:35.507 回答
0

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

  1. 创建一个 PHP 文件,需要进行数据库检查。
  2. 让它发布'T'或'F'或类似的东西
  3. 创建一个SetInterval('yourfunctionname',100),以便您可以调用轮询脚本。
  4. 如果该轮询的答案是“T”,请调用您的其他长时间脚本。
于 2010-03-22T15:00:03.497 回答
0

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

PHP 脚本只会检查数据库字段,并立即返回真/假。

于 2010-03-22T15:01:47.850 回答