我进行了2次ajax调用。只有当第一个完成时才应调用第二个:
var deferred = $.Deferred();
firstAjaxCall();
deferred.done(function () {
secondAjaxCall();
});
function firstAjaxCall() {
$.ajax({
url: '/SomeUrl',
type: 'POST',
success: function () {
deferred.resolve();
}
});
}
function secondAjaxCall() {
$.ajax({
url: '/SomeOtherUrl',
type: 'Get',
});
}
我也尝试过(jQuery deferreds)
$.when(firstAjaxCall()).done(function() {
secondAjaxCall();
});
但没有运气。
尽管如此,在第一个例子中,有时第一个调用会被调用,有时它不会被调用
在第一个例子中,流程是这样的:
firstAjaxCall();
secondAjaxCall();
deferred.resolve();
为什么在deferred.resolve()
之前先调用第二个调用?
答案 0 :(得分:2)
你必须实际将延期从$.ajax
返回到$.when
才能完成这项工作
function firstAjaxCall() {
return $.ajax({
url : '/SomeUrl',
type : 'POST'
});
}
function secondAjaxCall(data_from_first) {
return $.ajax({
url : '/SomeOtherUrl',
type : 'Get',
});
}
firstAjaxCall().done(secondAjaxCall);
答案 1 :(得分:0)
您可以尝试在第一个的成功功能中调用secondAjaxCall()
像这样:
function firstAjaxCall() {
return $.ajax({
url: '/SomeUrl',
type: 'POST',
success: secondAjaxCall()
});
}