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

时间:2010-11-17 01:10:43

标签: javascript jquery return-value 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查找中检索的值?

3 个答案:

答案 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语句在响应之前执行 ,因此尚未设置变量。

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