代码之家  ›  专栏  ›  技术社区  ›  Mefhisto1

Jquery延迟,行为不符合预期

  •  0
  • Mefhisto1  · 技术社区  · 9 年前

    我打了两个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 回复  |  直到 8 年前
        1
  •  2
  •   adeneo    9 年前

    您必须实际返回来自 $.ajax $.when 让它发挥作用

    function firstAjaxCall() {
        return $.ajax({
            url  : '/SomeUrl',
            type : 'POST'
        });
    }
    
    function secondAjaxCall(data_from_first) {
        return $.ajax({
            url  : '/SomeOtherUrl',
            type : 'Get',
        });
    }
    
    firstAjaxCall().done(secondAjaxCall);
    
        2
  •  0
  •   Islam Zedan    9 年前

    你可以试着打电话 secondAjaxCall() 在第一个成功函数中 这样地:

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