2012-01-11 83 views
4

我有这个功能如何在javascript函数中返回json对象?

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'),捕获返回值,它得到价值。

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

+1

的可能重复[异步JavaScript的返回值与jQuery /分配](http://stackoverflow.com/questions/7779697/javascript -asynchronous-return-value-assignment-with-jquery) – 2012-01-11 21:10:04

回答

5

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

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

,然后用它对付像

$(function(){ 
    getTags('0').done(function(json) { 
     // do something with json 
    }); 
}); 
1

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

1

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

你不能从它返回。

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

2

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

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

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

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

+2

'async:false'使整个浏览器锁定,直到完成AJAX调用。 – 2012-01-11 21:23:40

+0

嗯。是。如果这就是OP想要的..? – bububaba 2012-01-11 21:25:50

+1

我的意思是这是一件坏事,因为用户可能认为他们的浏览器崩溃了。 – 2012-01-11 21:33:17