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查找中检索的值?
答案 0 :(得分:13)
这是因为当响应返回时,回调函数(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);
});
}
这就是所有异步行为的方式,一旦你拥有它就会启动任何需要的值......这就是服务器响应数据的时候。
答案 1 :(得分:10)
如果您不想使用异步功能,请更好地使用以下内容:
function getValue(){
var value= $.ajax({
url: 'http://www.abc.com',
async: false
}).responseText;
return value;
}
此函数等待,直到从服务器返回值。
答案 2 :(得分:3)
传递给getJSON
的功能在HTTP请求响应时运行,不立即。
return语句在响应之前执行 ,因此尚未设置变量。
让您的回调函数执行需要处理数据的功能。不要试图归还它。