Jquery延迟不按预期行事

时间:2016-04-19 07:03:11

标签: javascript jquery

我进行了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()之前先调用第二个调用?

2 个答案:

答案 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()
  });
}