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

Javascript 如何从调用$.getJSON的函数返回值?,javascript,jquery,return-value,getjson,Javascript,Jquery,Return Value,Getjson,为什么此函数的returnValue始终等于函数开头设置的默认值,而从不等于从JSON查找中检索到的值?发生这种情况是因为回调函数(函数(数据){…})稍后当响应返回时运行…因为它是一个异步函数。而是在设置值后使用该值,如下所示: function lookupRemote(searchTerm) { var defaultReturnValue = 1010; var returnValue = defaultReturnValue; $.getJSON(remote, f

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

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

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;
}

这是所有异步行为应该采用的方式,一旦你有了值,就启动任何需要的东西……这就是服务器用数据响应的时候。

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

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


让回调函数对数据执行需要执行的操作。不要尝试返回它。

如果不想使用异步函数,最好使用以下命令:

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的可能副本。如果您需要同步行为,则此函数将像charm一样工作。如果不想将JSON更改为字符串,它会将JSON返回到字符串中,只需执行
JSON.parse(value)
function getValue(){
   var value= $.ajax({ 
      url: 'http://www.abc.com', 
      async: false
   }).responseText;
   return value;
}