2012-10-26 42 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

我不知道如果我理解你的權利,但jQuery將一個遞延對象混入其jXHR對象,你可以只是檢查其狀態。

var resp = $.ajax({}); 

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

其他的州rejectedpending,看到http://api.jquery.com/deferred.state/

當然,你可以得到那些遞延對象藏漢的所有優點,比如增加了事後某些事情(.done()更多事件處理程序.fail()等)或者只是等待爲承諾fullfil使用$.when()

+0

是的,正是我真正想要的。 – think123

+0

正在檢查'state()'就像檢查'resp'的狀態是否是** 200 **? – vsync

+0

猜猜我們永遠不會知道答案... – Denny

6

您可以在您的Ajax調用回調:

$.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'的調用失敗,因爲該方法在服務器上不存在,在catch調用foo 2,然後3直到你已經用盡了所有的後退。

如果你知道方法存在並認爲它會失敗,那麼設置一個狀態就可以返回,如果服務器失敗,然後在ajax回調中處理返回。

+0

jQuery不會在失敗的Ajax請求上拋出異常。 – Bergi

+0

但如果該方法不存在,則會引發錯誤。 –

+0

好的,但是檢查一個函數的存在不應該用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 
    }); 
} 
相關問題