【问题标题】:How to return a value from a function that calls $.getJSON?如何从调用 $.getJSON 的函数返回值?
【发布时间】:2011-05-11 04:21:17
【问题描述】:
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 查找中检索到的值?

【问题讨论】:

标签: javascript jquery return-value getjson


【解决方案1】:

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

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

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

【讨论】:

  • +1 如果您需要同步行为,这就像魅力一样。如果不想将其更改为字符串,它将返回 JSON 为字符串,只需执行 JSON.parse(value)
【解决方案2】:

发生这种情况是因为回调函数 (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);
     });
}

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

【讨论】:

    【解决方案3】:

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

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

    让您的回调函数对数据执行需要执行的操作。不要试图退货。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 2010-11-16
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多