Javascript AJAX请求成功时如何返回值

Javascript AJAX请求成功时如何返回值,javascript,jquery,ajax,asynchronous,return-value,Javascript,Jquery,Ajax,Asynchronous,Return Value,即使请求成功,函数也会返回false,因为请求是异步的。当请求成功时,我如何返回true?您可以稍微重构代码,以便成功回调触发下一个操作,该操作取决于真/假结果。例如,如果您当前有以下内容: function ajaxRefresh(actionUrl) { $.ajax({ url: actionUrl, success: function() { return true; }});

即使请求成功,函数也会返回
false
,因为请求是异步的。当请求成功时,我如何返回
true

您可以稍微重构代码,以便成功回调触发下一个操作,该操作取决于真/假结果。例如,如果您当前有以下内容:

   function ajaxRefresh(actionUrl) {
        $.ajax({
        url: actionUrl,
        success: function() {
             return true;
        }});
        return false;
    }
function ajaxRefresh(actionUrl) {   
    bool isSucesss=false;
    $.ajax({       
        url: actionUrl,        
        success: function() {   
            isSucesss=true;     
        },
        error:function() {   
            isSucesss= false;     
        }
    });     
    return isSucesss;
}
function main() {
  // some code

  if (ajaxRefresh(url)) {
    // do something
  }
}
您可以将其更改为:

function ajaxRefresh(actionUrl) {   
    bool isSucesss=false;
    $.ajax({       
        url: actionUrl,        
        success: function() {   
            isSucesss=true;     
        },
        error:function() {   
            isSucesss= false;     
        }
    });     
    return isSucesss;
}
function main() {
  // some code

  if (ajaxRefresh(url)) {
    // do something
  }
}
您还可以将
if
测试放在ajax回调函数中,而不是放在
doSomething()
函数中。由你决定


或者,您可以发出同步请求,并在请求完成后计算出
ajaxRefresh()
函数的返回值。我不建议在大多数情况下使用回调功能。

使用回调功能

回调函数队列:-

beforeSend、error、dataFilter、success和complete选项都接受在适当时间调用的回调函数

那么,这里

function main() {
  // some code

  ajaxRefresh(url);
}

function doSomething(successFlag) {
  if (successFlag) {
    // do something
  }
}

function ajaxRefresh(actionUrl) {
  $.ajax({
         url: actionUrl,
         success: function() {
           doSomething(true); // or false as appropriate
         }});
}
你可以在这里得到更多的细节

在ajax请求未完成之前,您不能返回“true”,因为它是异步的,如您所述。因此,该函数在ajax请求完成之前就离开了

解决方案1 但是有一个解决方法:只需向函数中添加一个回调参数。此函数将在请求完成时执行

解决方案2 您可以返回延迟的jquery

function ajaxRefresh(actionUrl, successCallback) {
    $.ajax({
       url: actionUrl,
       success: successcallback
    });
}
现在,您可以使用以下功能:

function ajaxRefresh(actionUrl, successCallback) {
    return $.ajax({
       url: actionUrl
    });
}

有关jquery延迟的更多信息,请参阅。

您应该将参数
async
设置为
false
。请尝试以下代码:

function otherFunction()
{
     ajaxRefresh().success(function() {
        //The ajax refresh succeeded!
     }).error(function() {
        //There was an error!
     });
}

我在这方面相对来说是个新手,但这里有一个我提出的建议解决方案,它消除了将
asynch
设置为false或类似设置的需要。只需使用ajax调用的结果设置一个隐藏字段值,而不是检查返回值,而是检查隐藏字段的值是否为true/false(或任何您想要输入的值)

例如: 函数doSomething(){

然后在需要的其他地方调用此
doSomething
函数,而不是检查ajax调用的结果,而是查找隐藏字段值:

    $.ajax({
        ...blah blah 
        },
        success: function(results) {
            if(results === 'true') {
                $('#hidField').val('true');
            }
            else {
                $('#hidField').val('false');
            }
        }
    });

如果您还将ajax调用设置为同步,则这应该可以工作。否则,它将始终返回与原始代码相同的false。从成功和错误回调函数返回true或false(或任何其他内容)将没有帮助,因为这些返回值不会返回到生成
$.ajax()的代码位
call。成功和/或错误回调函数实际上需要直接调用应在true或false值上执行的代码。Eeeck!Async:false将在ajax调用期间锁定浏览器。这通常是一种糟糕的用户体验。好的解决方案需要重构代码以使用回调或函数c从成功/错误函数到继续执行过程并传递ajax调用的结果。是的,你是对的。但我已经准确地回答了这个问题。Artur问了如何使函数返回结果。可用性问题是不可能的。我想每个人都有自己的回答风格。如果有人要这样做的话我想帮助他们理解这一点,而不是仅仅回答字面上的问题。这可能有助于解决这个问题:
doSomething();

var theResult = $('#hidField').val();

if (theResult == 'true') {

...do whatever...

}