我有以下
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()功能移至其他功能,那么我将复制一堆代码。
return $.ajax()
.done()
.fail()
doSomething()
doSomethingElse()
如何避免这种情况?只需将计算包装到它自己的函数中,然后在必要时调用它?
重组代码以使用回调而不是返回,例如…
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'); }); }