【问题标题】:How can i return a value from a callback function to the caller?如何将回调函数中的值返回给调用者?
【发布时间】:2011-07-26 11:35:26
【问题描述】:

如何让这个小函数“imageExists”返回 ajax 请求是否成功?

function imageExists(path){
    $.ajax({
        url: path,
        type: 'HEAD',
        error:
            function(){
                return false;
            },
        success:
            function(){
                return true;
            }
    }); 
}

【问题讨论】:

    标签: javascript ajax callback return


    【解决方案1】:

    您将在 success 函数或 error 函数中返回 AJAX 调用的结果,因此接下来应该调用的任何函数都应该从该点开始调用。

    因为 AJAX 请求是异步的(我建议不要将其设为阻塞同步调用),所以您发出请求但不知道它何时返回;它会在它返回时给你打电话,所以你只需要给它提供一些可以调用的东西。

    function imageExists(path){
        $.ajax({
            url: path,
            type: 'HEAD',
            error:
                function(){
                    iveReturned(false);
                },
            success:
                function(){
                    iveReturned(true);
                }
        });   
    }
    
    function iveReturned(result) {
        // code here to do something following AJAX response.
    }
    

    【讨论】:

    • 是的——调用者在回调被触发之前返回任何它要去的东西。
    • 只有当它异步时...如果不是它会停止执行直到它返回。
    • @CrazyDart - 这正是我所说的:)
    • 谢谢!我的情况很重要,该值返回给调用者......
    【解决方案2】:

    我相信您将不得不使用同步模式并使用单独的变量来存储返回值。

    function imageExists(path){
        var isSuccess;
        $.ajax({
            url: path,
            type: 'HEAD',
            async: false,
            error:
                function(){
                    isSuccess = false;
                    return false;
                },
            success:
                function(){
                    isSuccess = true;
                    return true;
                }
        });
        return isSuccess;
    }

    【讨论】:

    • 非常感谢,工作perjekt,不知道回调函数可以从调用者函数访问变量,或者像在这种情况下从调用者,调用者...
    • 虽然不推荐Async false
    【解决方案3】:

    创建一个 var 以在全局级别上保存响应,然后将 async 设置为 false。然后,您需要在成功或错误函数中设置该 var。

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

    function imageExists(path){
    myVar = null;
    $.ajax({
        url: path,
        type: 'HEAD',
        error:
            function(){
                myVar = false;
            },
        success:
            function(){
                myVar = true;
            },
        async: false
    }); 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2010-09-28
      • 2017-05-08
      相关资源
      最近更新 更多