Я готовлю материал для примера, в котором также рассматриваются основы обещаний jQuery, и я рассматриваю некоторые странные действия. Надеюсь, вы, ребята, можете помочь мне в этом.jQuery Посылы аргументов failback 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
Perfect. благодаря –