【问题标题】:jQuery getJSON save result into variable [duplicate]jQuery getJSON将结果保存到变量中[重复]
【发布时间】:2013-03-23 18:58:32
【问题描述】:

我使用 getJSON 从我的网站请求 JSON。它很好用,但我需要将输出保存到另一个变量中,如下所示:

var myjson= $.getJSON("http://127.0.0.1:8080/horizon-update", function(json) {

                 });

我需要将结果保存到myjson,但似乎这种语法不正确。有什么想法吗?

【问题讨论】:

标签: javascript jquery json


【解决方案1】:

调用getJSON时无法获取值,只有响应后。

var myjson;
$.getJSON("http://127.0.0.1:8080/horizon-update", function(json){
    myjson = json;
});

【讨论】:

  • 这个问题是var myjson由于时间问题在下一行不可用。
  • @JanDvorak 是的,请求是异步执行的,如果你需要json数据继续,你应该在设置myjson变量后调用其他代码。作为解决方案,它可能类似于 Ravi 答案中的“callbackFuncWithData”,或者只是调用另一个函数。
  • 一旦你这样做了,真的没有理由在外面声明myjson。只需将其作为参数传递给回调即可。
  • @JanDvorak 有时是必需的,例如当您使用客户端过滤时。这取决于您的应用逻辑。
【解决方案2】:

$.getJSon 需要一个回调函数,要么将其传递给回调函数,要么在回调函数中将其分配给全局变量。

var globalJsonVar;

    $.getJSON("http://127.0.0.1:8080/horizon-update", function(json){
               //do some thing with json  or assign global variable to incoming json. 
                globalJsonVar=json;
          });

IMO 最好是调用回调函数。这对眼睛,可读性方面更好。

$.getJSON("http://127.0.0.1:8080/horizon-update", callbackFuncWithData);

function callbackFuncWithData(data)
{
 // do some thing with data 
}

【讨论】:

  • 我认为第一个解决方案行不通。 .getJSON 是异步的,因此您将无法访问任何外部变量。您需要做的是在低级 ajax 中设置 async:false
  • @lngs:不,它会起作用。回调函数是一个 closure 并且可以访问在更高范围中定义的所有变量。您仍然必须小心when 访问该变量,即在您调用$.getJSON 后您不能立即访问它。在这种情况下,您确实必须发出同步请求。
  • 那么你怎么知道ajax调用什么时候完成以及响应数据有多大呢?你仍然需要使用回调函数来做到这一点。
  • 是的,你怎么知道什么时候你可以访问数据?
猜你喜欢
  • 2016-05-20
  • 1970-01-01
  • 2014-05-25
  • 2021-03-07
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
相关资源
最近更新 更多