2012-10-26 16 views
5

私は自分のタイトルがあまり明確ではないことを知っています。たとえば、これは私のコードの構造jQueryを使用してajax呼び出しが存在するかどうかを確認する方法?

されています:

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呼び出しの観点から質問に答えてください。

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

答えて

12

をしてすることができますその状態をチェックするだけです。

var resp = $.ajax({}); 

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

他の状態は、あなたが後で特定のもの(.done()のためのよりイベントハンドラの追加など、オブジェクトaswell繰延それらのすべての利点を得ることができ、もちろんhttp://api.jquery.com/deferred.state/

参照、rejectedpendingです.fail()など)またはをお待ちください。$.when()を使用してfullfilをお約束してください。

+0

うん、まさに私が本当に望んでいた。 – think123

+0

は 'state()'をチェックしています。 'resp'のステータスが** 200 **であるかどうかを確認するのと同じですか? – vsync

+0

私たちは決して答えを知らないだろうと思う... – Denny

6

あなたのAJAX呼び出し中のコールバックを設定することができます。私はあなたが右の理解かどうかわからないんだけど、jQueryのはそのjXHRオブジェクトに繰延オブジェクトを混合する

$.ajax({ 
    url: "foo1.html" 
}).done(function() { 
    alert('Done!'); 
}); 
+0

とにかくまだ妥当です。 – think123

3

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

var isRunning = true; 

$.ajax({ 
    url: url, 
    success: function(resp){ 
     isRunning = false; 
    } 
}); 
0

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

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

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

+0

jQueryは、失敗したAjaxリクエストに対して例外をスローしません。 – Bergi

+0

が存在しますが、メソッドが存在しない場合はエラーが発生します。 –

+0

OKですが、関数の存在をチェックするのは、try-catch – Bergi

1

同様の問題がありました。私はこのコードを使用しました:

var isRunning = false; // whether ajax call is running 
if(isRunning==false){ 
    isRunning = true; 
    $.ajax({ 
    // do your stuff 
    // make sure you set 
    isRunning = false; 
    // on success 
    }); 
} 
関連する問題