2012-05-11 18 views
-1

私はXメールを送信するPHPプロセスを持っています。各メールを送信した後、メールが送信されたことを伝えるためにデータベースに行を追加します。ajax関数の処理中にajax関数を処理する

だから、私はXメールが(合計Y =)Yにsendedではされているユーザーに伝えるためのプログレスバーを作成するためにwan't

私はそのような2つのjqueryの機能があります。

function mail_send() 
{ 
    var refreshIntervalId; 
    $('.loading').css('display','block'); 
    $.ajax({ 
     'url': '/an/url/', 
     'data': { 
        someParam: param 
       }, 
     'beforeSend':function() 
        { 
         $('#loadingBg').append('<span id="count"></span>'); 
         refreshIntervalId =setInterval(function() { 
          mail_updateProgress(id); 
         }, 500); 
        } 

     , 
     'success': function (data,textStatus) 
        { 
         (....) 
         clearInterval(refreshIntervalId); 
         javascript: console.log(' send finish !!!'); 
        } 
    }); 
} 

function mail_updateProgress(id) { 
    javascript: console.log('updatePG'); 
    $.ajax({ 
     'url': '/an/url/', 
      'data': { 
         someParam: param 
        }, 
     'success': function (data) { 
         var res = $.parseJSON(data); 
         javascript: console.log(' => data received ' + res.nbSended); 
         $('#count').html(res.nbSended + '/' + res.total); 
        } 
    }); 
} 

$ .ajaxのキューがありますか?私は3つの事をlogginだ:最初:のUpdateProgressのアヤックスは、第三successedされています:プロセスが第二のUpdateProgress関数に入力しているときMAIL_SEND()Ajaxは

ログの順序をsuccessedされている。

  • updatePG => 100回(私はテストのために私のPHPコードで睡眠をした)
  • send finish !!! => 1回
  • =>データは、私にとって、それはAJAX呼び出しのためのキューがあることを教えてくれますので、

(私は11通のメールを送信しました)11 => X回を受けました。しかし、私はどのように私の進捗バーを行うことができますか?

EDIT: それは

誰かが同じprocessusからマルチ接続を許可する方法を私に伝えることができ、PHPの設定の問題がある可能性がありますか?

+0

私はあなたが必要とするものを正確に理解していませんが、PHPスクリプトが進捗状況を書き込むテキストファイルを作成し、このファイルを繰り返しチェックして進捗を表示するAjax関数を作成できます。 – Shubham

+0

これは同じ質問です。他のものと同じ時間に$ .ajax()関数をどのように実行するのですか? :s –

+0

あなたはそれをより良く説明できますか? –

答えて

1

を探していると思います。これらのスロットを両方ともこの機能で埋めようとしています。構築しているアプリケーションに関する詳細な情報がわからなければ、具体的には今のところ私が推測できることです。

これを行うより良い方法は、あなたのメール送信リクエストのクライアント接続を終了し、クライアントの終了を超えてそのプロセスを続行することです。これにより、ブラウザ用のhttp要求スロットが解放され、mailProgress ajax関数が待ち行列などを心配することなく、書かれたとおりに実行できるようになります。

ここでは、クライアントの終了を無視に関する別のスタックオーバーフローの質問です:Can a PHP script continue running after ending the HTTP request?

と(もスタックオーバーフローの問題上記にリンクされている)、それを行う方法の詳細とブログ記事:http://waynepan.com/2007/10/11/how-to-use-ignore_user_abort-to-do-process-out-of-band/

・ホープそれは助ける。

+0

それで、私はmail_send()関数を "停止"し、値が100%になるまでもう1つ実行させる必要がありますか? –

+1

あなたのmail_sendリクエストは、長時間実行されるHTTPリクエストではなく、あなたのスクリプトが電子メールを送信するように要求するリクエストに変わります。進捗チェックスクリプトがあるので、そのスクリプトを使用してアプリケーションのonCompleteイベントを発生させます。 mail_send要求はまだサーバー上で実行され、クライアントはそれに直接接続されません。 –

+0

大丈夫、それは本当に美しいですが、私は添付ファイルを "忘れた"ために何が使えますか? $ .getはに添付されるので? –

0

私はあなたがおそらくWebブラウザが任意のドメインの実行中の2つの以上の同時Webリクエストを持たないように設計されていることを問題に実行している$.done()

+0

問題はプログレスバーを表示するのではなく、このプログレスバーの値を表示することです(例:13/124) –

+0

私のコードでは、11/11が$ .ajax:success mail_updateProgress()関数はmail_send()関数の後で呼び出され、その間は呼び出されません!あなたの '$( '。loading').html( '1/2機能が完了しました!まだ働いています...');' ALLが終了し、 '$( 'loading').html( '完了しました! '); s –