如何在javascript函数中返回json对象?

时间:2012-01-11 21:07:22

标签: javascript jquery json function

我有这个功能

function getTags(level){
    $.getJSON("php/get-tags.php", { "parent": level }, function(json) {
        return json;
    });
}

我将此功能称为

$(function(){
    var tags = getTags('0');  
});

问题是,在函数getTags()中,返回json就像

{"tags":["Mathematics","Science","Arts","Engineering","Law","Design"]}

但是在var tags = getTags('0')处,捕获返回值时,它会获得undefined值。

我返回值的方式不正确吗?

5 个答案:

答案 0 :(得分:5)

与许多已经正确描述的其他人一样,默认情况下,ajax请求会异步运行。所以你需要以适当的方式处理它。你可以做的是返回由jQuery promise maker组成的jXHR对象。这可能像

一样
function getTags(level){
    return $.getJSON("php/get-tags.php", { "parent": level });
}

然后像

那样处理它
$(function(){
    getTags('0').done(function(json) {
        // do something with json
    });
});

答案 1 :(得分:2)

您正试图以同步方式调用异步函数。

当你调用getTags时,它会触发对你的PHP页面的调用,如果javascript被阻止,那么你的页面会挂起,直到你的服务器用JSON响应。您需要重新考虑逻辑并触发回调。

function getTags(level){
    $.getJSON("php/get-tags.php", { "parent": level }, function(json) {
        //do something with the JSON here.
    });
}

答案 2 :(得分:1)

您无法从AJAX通话中返回。这是异步的。您需要让所有逻辑处理回调中返回的数据。

答案 3 :(得分:1)

getJSON是异步的,调用它的函数将在HTTP响应返回并触发回调时完成。

你不能从它返回。

使用回调来做你想做的任何数据。

答案 4 :(得分:1)

如果你需要这样工作,你的getTags函数必须返回一个值。目前还没有。您可以使用$.ajax并将async设置为false来实现此目的。