JQuery中未定义的返回值

时间:2013-06-06 19:26:00

标签: javascript jquery return

此函数在执行时返回未定义的值。如果页面加载,我希望它返回true,否则返回false:

function JLoad (url) {
        var uri = url + ' #div';
        $("#div").load(uri, {'bd': '1'}, function(response, status, xhr){
            if (status != "error"){
                if (window.history && window.history.pushState)
                {
                    window.history.pushState({}, 'Test', url);
                }
                else
                {
                    window.location.hash='!/'+url;
                }
                return true;
            }else{
                return false;
            }
        });
    };

这是用于请求该功能的代码的一部分:

$(document).ready(function() {
$("a").on("click", function() {
        var url = $(this).attr("href").replace('./', '');
    console.log(JLoad(url));
        return false;
    });
});

1 个答案:

答案 0 :(得分:3)

因为jQuery.load()是异步的,所以重写你的函数以接受回调。

function JLoad (url, cb) {
    var uri = url + ' #div'
    $("#div").load(uri, {'bd': '1'}, function(response, status, xhr){
        if (status != "error"){
            if (window.history && window.history.pushState)
            {
                window.history.pushState({}, 'Test', url);
            }
            else
            {
                window.location.hash='!/'+url;
            }
            cb(true);
        } else{
            cb(false);
        }
    });
}

然后:

$(document).ready(function() {
    $("a").on("click", function() {
        var $link = $(this),
            url = $link.attr("href").replace('./', '');

        JLoad(url, function(successful) {
            if (successful) {
                $("a").removeClass("active");
                $link.addClass("active");
            }
        });
    });
});