1

メールを送信し、サーバーからデータを取得するためにajax使用するhtmlページからリクエストを送信しています。jquerybulk

バルクメールのリクエストを送信するコードは次のとおりです

var sendReq =   $.ajax({
                type: 'post',
                data: "leftID="+JSON.stringify(leftID)+"&rightID="+JSON.stringify(rightID)+"&mode="+mode,
                dataType: 'json',
                url:"bulk.php"


        });

        sendReq.done(function( data ) {


                    $("#bms-ack").html(data.status);
                    $("#bms-ack").fadeIn('slow');
                    $("#bms-ack").fadeOut(6000);

                    console.log(data);
                    console.log("success");

        });

        sendReq.fail(function(jqXHR, data){


                    $("#bms-ack").html(data.status);
                    $("#bms-ack").fadeIn('slow');
                    $("#bms-ack").fadeOut(6000);


                    console.log("fail");


        });

問題は、phpページにリクエストを送信すると、メールが送信され、successメッセージで応答することです。

PHP が応答をクライアントに返すので、この ajax 要求はブロックされますか? 新しいデータを取得するために別のリクエストを送信jqtableすると、以前の ajax の一括メール送信リクエストが終了しないまで時間がかかるためです。そして最終的にjqtableはロードし続けます。

リクエストのブロックを解除するにsuccessはどうすればよいですか? PHP から返されたメッセージを削除する必要があります。

4

2 に答える 2

0

私の知る限り、AJAX 請願を送信する場合、非同期で新しいページを要求するのとまったく同じです。ページがブラウザに送信されない限り、結果を待ち続けます。他のリクエストは単なる更新です。

したがって、「ノンブロッキング」AJAX 方式を実現したい場合は、AJAX 請願を「別の」URL に送信します。つまり:

url:"bulk.php" => Change to url: "bulk.php?v=3"

クエリ文字列は単なる foo であり、呼び出す URL を変更するだけです。

AJAX 請願書を作成するときは、実行しているすべての請願書にクエリ文字列を追加するだけです (?v=X を使用するだけで十分です。ここで、X は、取得しているデータの 1 つである可能性があります。行、何でも...)、そしてブラウザは別の請願であると考え、PHPファイルが生成している値を取得することを妨げたり(ブロックしたり)しないので、それは魅力のように機能します(ただし、異なるデータを送信しているため、値が異なります:D)

アップデート

うーん...それはあなたが働き続けることができるはずです。確認のため、次のコードを試してみて、どうなるか教えていただけますか?

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                for(var $i=0; $i<5; $i++) {
                    $.ajax({
                        type: 'post',
                        url:"ajax.php?v="+$i,
                        success: function(data) {
                            console.log(data)
                        }

                    });
                    console.log('Browser: ' + $i);
                }
            });
        </script>
    </head>
    <body>
        AJAX TEST
    </body>
</html>

AJAX ファイル: (ajax.php)

<?php
sleep(5);
echo 'WAAAAAAAA';

私には、5 つの AJAX 呼び出しが同時にサーバーに送信されます (動作をブロックすることはありません)。これはまさにあなたが達成したいことだと思います.ブラウザをテストして、同じものを受け取っているかどうか教えていただけますか? ところで、AJAX 投稿でブラウザの動作の画像を投稿していただけますか?

AJAX テスト結果

于 2013-05-15T11:50:38.313 に答える