如何在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想要的…?我的意思是这是一件坏事,因为用户可能认为他们的浏览器崩溃了。