Javascript Jquery延迟未按预期运行

Javascript Jquery延迟未按预期运行,javascript,jquery,Javascript,Jquery,我打了两个ajax电话。仅当第一个完成时,才应调用第二个: var deferred = $.Deferred(); firstAjaxCall(); deferred.done(function () { secondAjaxCall(); }); function firstAjaxCall() { $.ajax({ url: '/SomeUrl', type: 'POST', success: function () { deferr

我打了两个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',
    });
}
我也试过这样()

但是没有运气

尽管如此,在第一个例子中,有时第二个调用会先被调用,有时不会

在第一个示例中,流程如下所示:

firstAjaxCall();
secondAjaxCall();
deferred.resolve();

为什么第一次调用第二个调用时在
延迟之前调用。resolve()

您必须实际将延迟从
$.ajax
返回到
$

function firstAjaxCall() {
    return $.ajax({
        url  : '/SomeUrl',
        type : 'POST'
    });
}

function secondAjaxCall(data_from_first) {
    return $.ajax({
        url  : '/SomeOtherUrl',
        type : 'Get',
    });
}

firstAjaxCall().done(secondAjaxCall);

您必须实际地将延迟从
$.ajax
返回到
$

function firstAjaxCall() {
    return $.ajax({
        url  : '/SomeUrl',
        type : 'POST'
    });
}

function secondAjaxCall(data_from_first) {
    return $.ajax({
        url  : '/SomeOtherUrl',
        type : 'Get',
    });
}

firstAjaxCall().done(secondAjaxCall);

您可以尝试在第一个函数的success函数中调用
secondAjaxCall()
像这样:

function firstAjaxCall() {
  return $.ajax({
    url: '/SomeUrl',
    type: 'POST',
    success: secondAjaxCall()
  });
}

您可以尝试在第一个函数的success函数中调用
secondAjaxCall()
像这样:

function firstAjaxCall() {
  return $.ajax({
    url: '/SomeUrl',
    type: 'POST',
    success: secondAjaxCall()
  });
}

这里不需要
$.when()
。这可以是
firstAjaxCall(),然后是(secondAjaxCall)
@jfriend00-没错,我之所以添加它,是因为OP正在使用它,并询问延迟情况。这里不需要
$。when()
。这可以是
firstAjaxCall(),然后是(secondAjaxCall)
@jfriend00-没错,我添加它是因为OP正在使用它,并询问延迟的问题