在从函数返回之前等待AJAX​​完成?

Jak*_*son 9 javascript ajax jquery

我有以下内容

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');
}
Run Code Online (Sandbox Code Playgroud)

我有一个运行一些ajax的函数,然后返回true或false,具体取决于ajax是否成功.这个ajax函数我从我的代码中的多个地方调用.

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

我所读过的东西暗示我做了return $.ajax()我的功能,然后移动.done().fail()功能,我doSomething()doSomethingElse()功能.但是,在我的.done()方法中,我做了一个BUNCH计算.很多代码.所以问题是,如果我将.done()函数移动到我的其他函数,我复制了一堆代码.

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

Sor*_*ren 10

重构你的代码以使用回调而不是返回,像这样......

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');
  });
}
Run Code Online (Sandbox Code Playgroud)