一尘不染

从功能返回之前,等待AJAX​​完成?

ajax

我有以下

function doAjax()
{
  var result = false;
  $.ajax(url, data)
    .done(function(){
       // Do a bunch
       // of computation
       // blah blah blah
       result = true;
    }).fail(function(){
       result = false;
    });
  return result;
}

function doSomething()
{
  if ( doAjax() == true )
    console.log('success');
  else
    console.log('failed');
}

function doSomethingElse()
{
  if ( doAjax() == true )
    console.log('success');
  else
    console.log('failed');
}

我有一个运行一些ajax的函数,然后根据ajax是否成功返回true或false。我从代码的多个位置调用了这个ajax函数。

因为该函数在ajax完成之前结束,所以它总是返回false。如何避免这种情况?

我读到一些建议我return $.ajax()在函数中执行的操作,然后将.done().fail()函数移至我的doSomething()doSomethingElse()函数。但是,在我的.done()方法中,我进行了大量的计算。很多代码。因此,问题在于,如果我将.done()功能移至其他功能,那么我将复制一堆代码。

如何避免这种情况?只需将计算包装到它自己的函数中,然后在必要时调用它?


阅读 217

收藏
2020-07-26

共1个答案

一尘不染

重组代码以使用回调而不是返回,例如…

function doAjax(callback)
{
  $.ajax(url, data)
    .done(function(){
       // Do a bunch
       // of computation
       // blah blah blah
       callback(true);
    }).fail(function(){
       callback(false);
    });
}

function doSomething()
{
  doAjax(function(result){
    if (result == true )
       console.log('success');
    else
       console.log('failed');
  });
}

function doSomethingElse()
{
  doAjax(function(result){
    if (result == true )
       console.log('success');
    else
       console.log('failed');
  });
}
2020-07-26