我正在準備一些演示文稿的示例材料,其中也涵蓋了jQuery承諾的基礎知識,並且我正在計算一些奇怪的行爲。希望你們能幫我解決這個問題。jQuery Promises arguments failed callback undefined
我有以下代碼,它工作得很好。
var getHTML1 = $.ajax({
url: "jquerypromises.html",
type: "GET"
});
getHTML1.done(function(responseText, state, jqXHR){
console.log("success from AJAX request with promises : getHTML1!");
});
getHTML1.fail(function(){
console.log("error from AJAX request with promises : getHTML1!");
});
//this one will call the failure callback!!!!!!
var getHTML2 =
$.ajax({
url: "somenonexistingpage.html", //<== THIS WILL call the failure callback
type: "GET"
})
.then(
function(){
console.log("success from AJAX request with promises : getHTML2!");
}
,
function(jqXHR, state){
console.log("error from AJAX request with promises : getHTML2!");
}
);
此代碼運行作爲espected爲getHTML1
的完成處理程序被調用和getHTML2
故障處理程序被調用。
現在,當我在上面看到的代碼下面添加以下代碼時。
$.when(getHTML1, getHTML2).then(
function(response1, response2) {
// both arguments are arrays with[responseText, "success", jqXHR]
console.log("Both promises went successfull");
console.dir(response1);
console.dir(response2);
},
function(jqXHR, status) {
console.log("One of both promises went wrong!");
console.log(jqXHR);
console.log(status);
}
);
再次調用正確的處理程序。在這種情況下,失敗回調被調用,但它的所有參數都是未定義的。爲什麼是這樣?
現在,當我刪除了故障處理程序中then()
塊getHTML2
代碼變成這樣:
var getHTML2 =
$.ajax({
url: "somenonexistingpage.html", //<== THIS WILL call the failure callback
type: "GET"
})
.then(
function(){
console.log("success from AJAX request with promises : getHTML2!");
}
);
現在一切正常像預期,在第二故障處理程序則()塊被調用充滿了爭論。
測試在Chrome中使用jQuery 1.9.1
完美。謝謝 – 2013-02-18 16:09:03