-1

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

したがって、X メールが Y ( Y = 合計) に送信されたことをユーザーに伝えるためのプログレス バーを作成したくありません。

私はそのような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 つのことをログに記録しています: 最初: プロセスが updateProgress 関数で入力されたとき 2 番目: updateProgress ajax が成功したとき 3 番目: mail_send() ajax が成功したとき

ログの順序は次のとおりです。

  • updatePG => 100回(テストのためにphpコードをスリープさせました)
  • 送信完了!!! => 1回
  • => データを 11 回受信 => X 回 (メールを 11 回送信)

したがって、私にとっては、ajax 呼び出しのキューがあることを示しています。しかし、どうすればプログレスバーを実行できますか?

編集: phpの設定の問題かもしれませんが、

同じプロセスからのマルチ接続を許可する方法を教えてください。

4

2 に答える 2

1

Webブラウザーが、どのドメインでも2つ以下の同時Web要求を実行するように設計されているという問題が発生している可能性があります。これらのスロットの両方をこの関数で埋めようとしています。具体的には、作成しているアプリケーションに関する詳細情報がわからなくても、現時点で推測できるのはそれだけです。

これを行うためのより良い方法は、メール送信要求のためにクライアント接続を終了し、クライアントの終了を超えてそのプロセスを継続することを検討することだと思います。これにより、ブラウザのhttpリクエストスロットが解放され、キューなどを気にすることなく、mailProgressajax関数を記述どおりに実行し続けることができます。

クライアントの終了を無視することに関する別のスタックオーバーフローの質問は次のとおりです。HTTPリクエストを終了した後もPHPスクリプトを実行し続けることができますか?

そして、それを行う方法の詳細が記載されたブログ投稿(上記のStack Overflowの質問にもリンクされています):http ://waynepan.com/2007/10/11/how-to-use-ignore_user_abort-to-do -プロセスアウトオブバンド/

お役に立てば幸いです。

于 2012-05-11T12:34:05.650 に答える
0

$.done()を探していると思います

于 2012-05-11T10:40:05.347 に答える