我正在为演示准备一些示例材料,其中还涵盖了 jQuery 承诺的基础知识,并且我正在计算一些奇怪的行为。希望你们能帮我解决这个问题。
我有以下代码可以正常工作。
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!");
}
);
此代码按照调用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!");
}
);
现在一切都像预期的那样工作,第二个 then() 块中的失败处理程序被调用并填充了参数。
使用 jQuery 1.9.1 在 Chrome 中测试