2011-12-03 13 views
0

私はPHP + Ajaxを使用してウェブサイトを開発しています。 処理に時間がかかる(約5分)Ajaxリクエストを発生させる必要があるため、このリクエストからの応答は必要ありません。サーバーがこのajaxリクエストを実行している間は、バックグラウンドでゴーストAjaxリクエスト

マイコード:

//I can easly lunch the ajax request 

$.ajax({ 
    type: 'GET', 
    url: "myurl.php", 
    async: true, 
    success: function (data) {} 
}); 

このスクリプトが正常に動作しますが、言ったように、それが終了する前に数分かかり、これでは、ユーザが自分のドメインの任意のページを開くことはできませんが。私のブラウザは応答待ちの状態でロックされているようです。私のブラウザを "アンロック" する瞬間

私は以下のソリューションを持っている:

-restart自分のWebサーバー

ブラウザ

-wait -restartスクリプトが

を完了するまで

トリックや火災の "ゴースト"アヤックスリクエストがありますか?

(ゴーストiは応答を待つしたくないことを意味します)

私は要求とアボート()関数を呼び出すよりを発射するしようと試みたが、それはまた、PHPスクリプトの実行をすべての要求を中止。

ヒント?

PS。私はFirefox 8、Chrome 15.0、IE 9でテストしました

答えて

2

バックグラウンドスクリプトでセッションを使用している場合は、セッションバーを処理し終わったらsession_write_closeに電話する必要があります。時間。

0

あなたは別の方法で行うことができます。シンプルなキューで:

  1. (実行する必要がどのような命令で)それをデータベースに保存し、いくつかの仕事をするために、サーバーに要求を送信元のフラグを追加= 0
  2. 完了し、サーバー上で5分ごとにcronジョブを作成します。そこにタスクを未完了と完了として1
  3. はそれをマークし、それぞれ1で実行されている場合、(lockrunとPROB)
  4. cronジョブが実行され、チェックデータベース= 1
  5. タスクがフラグで終了した場合は、その後、見つけることができます
  6. (とprob userID)、タスクが完了したことをユーザーに通知します。

この方法でユーザーは問題なくサイトをナビゲートできます。プロセス中にdbを更新することで、必要な場合にどれだけ完了したかをユーザーに提示することもできます。