web-dev-qa-db-ja.com

jQueryに保留中のAjaxリクエストがあるかどうかを知るにはどうすればよいですか?

作成したjQueryコントロールに問題があります。探しているアイテムのIDを入力できるドロップダウンリストがあり、Enterキーを押すか、テキストボックスでフォーカスを失うと、入力したIDが正しいことをjQueryを介して検証し、そうでない場合はアラートを表示するとします't。

問題は、通常のユーザーが無効な値を入力し、送信ボタンを押してフォーカスを失うと、フォームの送信が送信された後にjQueryポストが戻ることです。

フォームの送信を許可しないように、jQueryによる非同期要求処理があるかどうかを確認する方法はありますか?

82
sabanito

ajaxStart および ajaxStop を使用して、リクエストがアクティブなタイミングを追跡できます。

36
ceejayoz

$.activeは、アクティブなAjaxリクエストの数を返します。

詳細 こちら

215
sivabudh
 $(function () {
        function checkPendingRequest() {
            if ($.active > 0) {
                window.setTimeout(checkPendingRequest, 1000);
                //Mostrar peticiones pendientes ejemplo: $("#control").val("Peticiones pendientes" + $.active);
            }
            else {

                alert("No hay peticiones pendientes");

            }
        };

        window.setTimeout(checkPendingRequest, 1000);
 });
24
etgregor

$ .ajax()関数は、XMLHttpRequestオブジェクトを返します。 Submitボタンの「OnClick」イベントからアクセス可能な変数に保存します。送信クリックが処理されたら、XMLHttpRequest変数が以下であるかどうかを確認します。

1)null。リクエストがまだ送信されていないことを意味します

2)readyState値が4(ロード済み)であること。これは、リクエストが正常に送信および返されたことを意味します。

いずれの場合でも、trueを返し、送信の続行を許可します。それ以外の場合は、falseを返して送信をブロックし、送信が機能しなかった理由をユーザーに示します。 :)

10
Toji

リクエストがアクティブな場合、リクエストを中止するには$。ajax.abort()メソッドを使用する必要があります。このpromiseオブジェクトはreadyStateプロパティを使用して、リクエストがアクティブかどうかを確認します。

HTML

<h3>Cancel Ajax Request on Demand</h3>
<div id="test"></div>
<input type="button" id="btnCancel" value="Click to Cancel the Ajax Request" />

JSコード

//Initial Message
var ajaxRequestVariable;
$("#test").html("Please wait while request is being processed..");

//Event handler for Cancel Button
$("#btnCancel").on("click", function(){
if (ajaxRequestVariable !== undefined)

if (ajaxRequestVariable.readyState > 0 && ajaxRequestVariable.readyState < 4)
{
  ajaxRequestVariable.abort();
  $("#test").html("Ajax Request Cancelled.");
}
});

//Ajax Process Starts
ajaxRequestVariable = $.ajax({
            method: "POST",
            url: '/echo/json/',
            contentType: "application/json",
            cache: false,
            dataType: "json",
            data: {
        json: JSON.encode({
         data:
             [
                            {"prop1":"prop1Value"},
                    {"prop1":"prop2Value"}
                  ]         
        }),
        delay: 11
    },

            success: function (response) {
            $("#test").show();
            $("#test").html("Request is completed");           
            },
            error: function (error) {

            },
            complete: function () {

            }
        });
1
vibs2006