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

等待ajax完成,然后返回结果(通用函数)[duplicate]

  •  0
  • steve  · 技术社区  · 6 年前

    关于如何在执行代码之前等待ajax完成,有很多例子。这不是我的问题。我的问题是如何实现通用函数的承诺/等待解决方案。

    我在脚本中使用了大量重复的ajax调用。我决定把这段代码变成一个通用函数。正如async所预期的那样,我遇到的问题是,代码不会等到ajax完成后才执行下一行代码。

    function universalAjax(data) {
    
      var returnedData = false;
    
      $.ajax({
        type: 'POST',
        url: '/longScript.php',
        dataType: 'json',
        data: data,
        headers: {
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        success: function(result) {
          returnedData = result;
        },
        fail: function(jqXHR, textStatus, errorThrown) {
    
        },
        complete: function(res) {
    
        },
        error: function(res) {
    
        }
      });
    
      return returnedData;
    }
    

    function foo(data) {
    
      var result = universalAjax(data);
    
      // executes before above function has finished
      alert(result);
    }
    

    我知道我可以在 success 但这意味着我有两个函数用于每个实例,我想得到ajax调用的结果。

    function universalAjax(data, callbackfunction) {
    
      $.ajax({
        type: 'POST',
        url: '/longScript.php',
        dataType: 'json',
        data: data,
        headers: {
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        success: function(result) {
          callbackfunction(result);
        },
        fail: function(jqXHR, textStatus, errorThrown) {
    
        },
        complete: function(res) {
    
        },
        error: function(res) {
    
        }
      });    
    }
    
    function foo(data) {
    
      var result = universalAjax(data, fooCallback);
    }
    
    function fooCallback(data) {
    
      alert(data);
    }
    

    同样,上面的例子只会调用 成功 .

    0 回复  |  直到 6 年前