AJAX请求成功时如何返回值

这个问题在这里已经有了答案:

  • 如何返回来自异步调用的响应? 33个答案

  • 您应该将参数async设置为false 。 试试这个代码:

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

    您可以稍微重构代码,以便您的成功回调触发取决于真/假结果的下一个操作。 例如,如果你目前有类似的东西:

    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()函数的返回值。 我不会建议大多数目的。


    你不能返回“真”,直到Ajax请求没有完成,因为它是你提到的异步。 所以这个函数在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 deferreds的信息,请查看http://www.erichynds.com/jquery/using-deferreds-in-jquery/。

    链接地址: http://www.djcxy.com/p/9493.html

    上一篇: How to return value when AJAX request is succeeded

    下一篇: Jquery Ajax Call, doesnt call Success or Error