У меня есть следующие методы JS:Отложенный требует многократного AJAX звонки
var foo = function() {
var dfd = $.Deferred();
console.log('foo');
dfd.resolve();
return dfd.promise();
};
var ajaxCall1 = function() {
var dfd = $.Deferred();
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: 'xxxxxxx',
data: { },
success: function(response) {
dfd.resolve();
}
});
return dfd.promise();
};
var ajaxCall2 = function() {
var dfd = $.Deferred();
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: 'xxxxxxx',
data: {},
success: function (response) {
dfd.resolve();
}
});
return dfd.promise();
};
var ajaxCall3 = function() {
var dfd = $.Deferred();
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: 'xxxxxxx',
data: {},
success: function (response) {
dfd.resolve();
}
});
return dfd.promise();
};
и я называю их с помощью этого кода:
foo().done(function() {
return ajaxCall1();
}).done(function() {
return ajaxCall2();
}).done(function() {
return ajaxCall3();
});
Вопрос заключается в том, что ajaxCall2 вызывается до успеха ajaxcall1 произошел. Можете ли вы помочь мне исправить это? Мне нужно сделать ajax-вызовы один за другим, когда произошел успех предыдущего.
'$ .ajax()' уже возвращает отложенный объект, поэтому нет причин использовать отдельный. Вместо 'return dfd.promise()' просто верните $ .ajax ({...}) '. –