如何从调用$ .getJSON的函数返回一个值?

function lookupRemote(searchTerm) { var defaultReturnValue = 1010; var returnValue = defaultReturnValue; $.getJSON(remote, function(data) { if (data != null) { $.each(data.items, function(i, item) { returnValue = item.libraryOfCongressNumber; }); } }); return returnValue; } 

为什么此函数的returnValue总是等于函数开头设置的默认值,而不是从JSON查找中检索的值?

发生这种情况是因为回调函数( function(data) {...}稍后在响应返回时运行…因为它是异步函数。 而是在设置后使用该值,如下所示:

 function lookupRemote(searchTerm) { var defaultReturnValue = 1010; var returnValue = defaultReturnValue; $.getJSON(remote, function(data) { if (data != null) { $.each(data.items, function(i, item) { returnValue = item.libraryOfCongressNumber; }); } OtherFunctionThatUsesTheValue(returnValue); }); } 

这就是所有异步行为的方式,一旦你拥有它就会启动任何需要的值……这就是服务器响应数据的时候。

如果您不想使用异步function,请更好地使用以下内容:

 function getValue(){ var value= $.ajax({ url: 'http://www.abc.com', async: false }).responseText; return value; } 

此函数等待,直到从服务器返回值。

传递给getJSON的函数在HTTP请求的响应到达时运行 ,而不是立即响应

return语句响应之前执行,因此尚未设置变量。

让您的回调函数执行需要处理数据的function。 不要试图归还它。