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

How to return value when AJAX request is succeeded

本文关键字:返回值 成功 AJAX 请求      更新时间:2023-09-26
   function ajaxRefresh(actionUrl) {
        $.ajax({
        url: actionUrl,
        success: function() {
             return true;
        }});
        return false;
    }

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

应将async参数设置为false。试试下面的代码:

function ajaxRefresh(actionUrl) {
    var succeed = false;
    $.ajax({
    async: false,
    url: actionUrl,
    success: function() {
         succeed = true;
    }});
    return succeed;
}

在ajax请求没有完成之前,您不能返回"true",因为正如您提到的,它是异步的。因此,在ajax请求完成之前,该函数将被保留。

解决方案1

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

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

解决方案2

你可以返回一个jquery延迟。

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

现在您可以使用如下函数:

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

有关jquery延迟的更多信息,请参阅http://www.erichynds.com/jquery/using-deferreds-in-jquery/.

你可以稍微重构一下你的代码,这样你的成功回调就会触发下一个依赖于true/false结果的操作。例如,如果您当前有如下内容:

function main() {
  // some code
  if (ajaxRefresh(url)) {
    // do something
  }
}

你可以把它改成:

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
         }});
}

您还可以将if测试放入ajax回调函数中,而不是放入doSomething()函数中。由你决定。

或者您可以进行同步请求,并在请求完成后计算ajaxRefresh()函数的返回值。在大多数情况下,我不建议这样做。

我在这方面是一个相对的新手,但这里是我提出的一个建议工作,它消除了将asynch设置为false或类似的东西的需要。只需用ajax调用的结果设置一个隐藏字段的值,而不是检查返回值,检查隐藏字段的值是否为真/假(或任何您想要放入其中的值)。

的例子:函数doSomething() {

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

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

doSomething();
var theResult = $('#hidField').val();
if (theResult == 'true') {
...do whatever...
}

使用回调函数

回调函数队列:-

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

so, here

function ajaxRefresh(actionUrl) {
        $.ajax({
        url: actionUrl,
        success: function() {
             return true;
        }
        error:function(){
             return false;
        }
     });        
    }

你可以在这里获得更多细节

http://api.jquery.com/jQuery.ajax/

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