5

私のタイトルはあまり明確ではないことを知っています。

たとえば、これは私のコードの構造です:

if (foo == something) {
  // Ajax call 1, let it be $.ajax("foo1.html") and so on
} else {
  // Ajax call 2, let it be $.ajax("foo2.html") and so on
}

$.ajax("foo1.html")実際に実行されたかどうかをテストするにはどうすればよいですか?

もう一度テストするように言わないでくださいfoo == something。私の実際のコードははるかに複雑なので、ajax 呼び出しの観点から質問に答えてください。

これはまったく可能ですか?

4

5 に答える 5

13

あなたが正しく理解しているかどうかはわかりませんが、jQuery はDeferredオブジェクトをそのjXHRオブジェクトに混合し、その状態を確認するだけです。

var resp = $.ajax({});

// somewhere else...
if( resp.state() === 'resolved' ) {
}

その他の状態はrejectedおよびです。http://api.jquery.com/deferred.state/pendingを参照してください。

もちろん、後で特定のもの ( 、など) のイベント ハンドラーを追加したり、使用して promise が満たされるのを待つなど、これらのDeferredオブジェクトのすべての利点を得ることができます。.done().fail()$.when()

于 2012-10-26T13:03:53.883 に答える
6

ajax 呼び出しでコールバックを設定できます。

$.ajax({
  url: "foo1.html"
}).done(function() { 
  alert('Done!');
});
于 2012-10-26T13:03:15.790 に答える
5

AJAX 呼び出しの前に変数を設定し、そのような成功のコールバックでそれをリセットします。

var isRunning = true;

$.ajax({
    url: url,
    success: function(resp){
      isRunning = false;
    }
});
于 2012-10-26T13:04:30.603 に答える
0

呼び出しを try キャッチでラップします。

メソッドがサーバーに存在しないために 'foo1' の呼び出しが失敗した場合は、キャッチ呼び出しで foo を 2 回、次に 3 回呼び出して、すべてのフォールバックを使い果たすまで続けます。

メソッドが存在することがわかっていて、それが失敗すると思われる場合は、サーバーが失敗した場合に返されるステータスを設定し、ajax コールバックで戻りを処理します。

于 2012-10-26T13:04:36.797 に答える