我有这个功能
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
值。
我返回值的方式不正确吗?
答案 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
来实现此目的。