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

如何在javascript函数中返回json对象?,javascript,jquery,json,function,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如下 {“标签”:[“数学”、“科学”、“艺术”、“工程”、

我有这个函数

function getTags(level){
    $.getJSON("php/get-tags.php", { "parent": level }, function(json) {
        return json;
    });
}
我把这个函数称为

$(function(){
    var tags = getTags('0');  
});
问题是,在函数
getTags()
中,返回的
json
如下

{“标签”:[“数学”、“科学”、“艺术”、“工程”、“法律”、“设计”]}

但是在捕捉返回值的
var tags=getTags('0')
处,它会得到一个
未定义的


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

您不能从AJAX调用返回。它是异步的。您需要拥有处理回调中返回数据的所有逻辑。

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

function getTags(level){
    $.getJSON("php/get-tags.php", { "parent": level }, function(json) {
        //do something with the JSON here.
    });
}
你不能从那里回来


使用回调函数可以对数据执行任何操作。

您正在尝试以同步方式调用异步函数

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

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

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

,与许多已经正确描述的其他方法一样,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
    });
});

可能重复的
async:false
会使整个浏览器锁定,直到AJAX调用完成。嗯。对如果这是OP想要的…?我的意思是这是一件坏事,因为用户可能认为他们的浏览器崩溃了。