2

jQuery AJAX 呼び出しの結果から変数を初期化/割り当ててから、それらの変数をスクリプトのさらに下で再利用する必要がある状況があります。

var shouldRedirect = ???

$.ajax({
    url: 'http://example.com',
    type: 'GET',
    data: 'blah',
    asynch: false,
    timeout: 1800,
    success: function(data) {
        shouldRedirect = data.rows[0].redirectFlag
    }
});

if(shouldRedirect)
    window.location = "...";

私が抱えている2つの問題:

  • 結果の JSON にredirectFlagブール値が含まれると仮定するとdata.rows[0].redirectFlag、変数の値を取得する適切な方法はありますか?; と
  • shouldRedirectAJAX が開始される前に何を初期化すればよいですか (「変数を作成するが、まだ値を与えないでください!」と言うにはどうすればよいでしょうか)。

前もって感謝します!

4

4 に答える 4

1

次のようにするだけで、初期化されていない変数を宣言できます。

var shouldRedirect;

ロジックが必要な場合は、もちろん false に初期化できます。

var shouldRedirect = false;

ただし、これはあなたが望むものではないかもしれません。変数を厳密に比較することで、変数が初期化されたかどうかを確認できますundefined

if (shouldRedirect === undefined) // do something

ただし、3 重の等号演算子 (別名、厳密な等号) を使用する必要があることに注意してください。使用しないと、期待どおりの結果が得られません。一方、未定義の変数は誤った結果をもたらします。これは、 simpleif (shouldRedirect)で変数をチェックし、変数が未定義のfalse場合、 false に設定されているかのように yield することを意味します。""これは、空の文字列や value など、JavaScript の他のいくつかの値にも当てはまりますnull。偽値の完全なリストは、こちらで確認できます。true または false を明示的にチェックし、他の偽または真の値を省略したい場合は、3 重等価でチェックする必要がありますif (shouldRedirect === true)

また、data.rows[0].redirectFlag値にアクセスする正しい方法は、AJAX 呼び出しから受け取るデータ構造が実際にどのように見えるかに大きく依存します。以下のようなものであれば正解です。

{ rows: [ {redirectFlag: true}, {redirectFlag: false} ] }

ただし、JSON が次のようになっている場合

{ redirectFlag: false }

次に、単に redirectFlag にアクセスする必要がありますdata.redirectFlag

于 2012-05-02T11:12:16.660 に答える
0

コメントセクションで述べたように、shouldRedirectフラグを設定しても、結果がサーバーからフェッチされる前にリクエストにif続くステートメント$.ajaxが評価されるため、役に立ちません。これは、非同期コード実行で直面する一般的な問題です。理論的には、パラメーターを使用してjQuery.ajaxを同期モードにすることsyncはできますが、リクエストが行われている間はブラウザーUIがロックされるため、そうすることはお勧めしません。

$.ajax success次のように、リダイレクトコードを関数に移動する必要があります。

$.ajax({
    url: 'http://example.com',
    // ... other options omitted for brevity

    success: function(data) {
        // This code block gets executed when the operation completes.
        var shouldRedirect = data.rows[0].redirectFlag
        if (shouldRedirect) {
            // Your redirection code goes here.
            window.location = "...";
        }
    }
});

jQuery 1.7以降を使用している場合は、遅延オブジェクトを介してPromises/A実装を使用できます。遅延オブジェクトを使用すると、操作の完了時に1つ以上の関数を実行でき、非同期コードが読みやすくなります。

$.ajax({ url: 'http://example.com' })
    .done(function(data) { 
        // This code block gets executed when the operation completes.
    });

関数クロージャをに渡す代わりにdone、メンバー関数への参照を渡すこともできます。例:

$.ajax({ url: url }).done(onDataLoaded);

function onDataLoaded(data) {
    // This function gets called when the ajax operation completes.
}
于 2012-05-02T11:39:42.120 に答える
0

パート 1 で値を持つ変数を宣言するには、var shouldRedirect を使用します。このようにして、if (!shouldRedirect) {} を実行するだけです。

パート 2 の場合。redirectFlag から値を取得する方法は、ajax 呼び出しから返されるデータの形式に基づいています。data... は、値を取得するための出発点になります。

于 2012-05-02T11:14:53.457 に答える
0
  • AJAX が開始される前に shouldRedirect を初期化するにはどうすればよいですか (「変数を作成するが、まだ値を指定しないでください!」と言うにはどうすればよいでしょうか)。

    あなたはただ行うことができます:var shouldRedirect;

ただし、var shouldRedirect = false;shouldRedirect が未定義でないことを確認するために行います

  • data.rows[0].redirectFlag は変数の値を取得する適切な方法ですか?

AJAX リクエストから何を送り返すかによって異なります。通常、応答は JSON 形式であるため、JSON オブジェクトを値 true で送り返す場合は、次のように実行できます。

shouldRedirect = data.redirectFlag;
于 2012-05-02T11:13:07.793 に答える