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

ステップ 1:長期実行プロセスへの最初の呼び出し - ignore_user_abort(true); を設定します。長い時間がかかり、接続を閉じるPHPスクリプトで。

ステップ 2:提案された方法を使用して DB フィールドが更新されているかどうかを確認します。

于 2010-03-22T15:07:35.507 に答える
0

AJAX の comm メソッドを介して直接 DB にアクセスすることはお勧めできないため、簡単な回避策の 1 つは、呼び出し可能な別の PHP スクリプトを作成して、それをチェックすることです。

  1. DB チェックが必要な 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 スクリプトは、データベース フィールドをチェックするだけで、すぐに true/false を返します。

于 2010-03-22T15:01:47.850 に答える