2015-07-21 81 views
0

我有這個簡單的代碼:如何使用promise獲取失敗的ajax請求的URI?

var jqXHR = $.getJSON(uri); 
jqXHR.done(function (ajax_data) { /* put here your code */ }); 
jqXHR.fail(function (jqXHR, lvl, msg) { 
    console.error(lvl + " with AJAX call: " + msg); 
}); 

有沒有辦法來從fail()處理程序jqXHR對象獲取uri?沒有jqXHR.url屬性,與$.ajax()error()處理程序的參數jqXHR相反。

我可以使用jqXHR.responseText,但它是從服務器的整個響應,這對我來說有點太多了。 PS:我使用jQuery的易用性承諾。如果我有時間,我會使用the Q library

+0

這是完全無關的承諾。 –

+0

在這個特定的情況下,你仍然可以訪問'uri',因爲它在函數閉包中,但是我猜這不是你想要的。 – Katana314

回答

0

有沒有jqXHR.url

嘗試this.url

var jqXHR = $.getJSON("../"); // `uri` : `"../"` 
 
jqXHR.done(function (ajax_data) { /* put here your code */ }); 
 
jqXHR.fail(function (jqXHR, lvl, msg) { 
 
    console.error(lvl + " with AJAX call: " + msg, this.url); // `error with AJAX call: ../` 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script>

+1

http://api.jquery.com/jQuery.ajax/#jqXHR:'所有回調中的這個引用是在設置中傳遞給$ .ajax的上下文選項中的對象。非常感謝:) –

+0

在我看來,JQuery文檔中存在一些混淆,因爲上下文選項中的對象和'$ .Ajax()'返回的jqXHR對象都是用變量名''jqXHR '。 –

+0

@LucasMalor _「在我看來,JQuery文檔中存在一些混淆,因爲上下文選項中的對象和$ .Ajax()返回的類似promise的對象都被稱爲jqXHR」_其中'context'與'jqXHR'相同?它們看起來不同;即'context'或'this'可以設置爲任何對象,'jqXHR'是jQuery承諾對象 – guest271314