jQuery getJSON将结果保存到变量中

use*_*351 69 javascript jquery json

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

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

                 });
Run Code Online (Sandbox Code Playgroud)

我需要保存结果,myjson但似乎这种语法不正确.有任何想法吗?

web*_*per 66

getJSON只有在回复之后,才能在通话时获得价值.

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

  • 这个问题是由于时序问题,`var myjson`在下一行不可用. (4认同)
  • @JanDvorak是的,请求是异步执行的,如果你需要`json`数据继续,你应该在设置`myjson`变量后调用其他代码.作为解决方案,它可能像来自Ravi的'callbackFuncWithData',或者只是调用另一个函数. (2认同)

Rav*_*dag 22

$ .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;
          });
Run Code Online (Sandbox Code Playgroud)

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

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

function callbackFuncWithData(data)
{
 // do some thing with data 
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为第一个解决方案不会起作用..getJSON是异步的,因此您无法访问任何外部变量.您需要做的是在低级别的ajax中设置async:false (3认同)
  • @lngs:不,它会奏效.回调函数是*closure*,可以访问更高范围中定义的所有变量.你仍需要小心**当*访问变量时,即你在调用`$ .getJSON`后无法立即访问它.在这种情况下,您真的必须进行同步请求. (3认同)
  • 那么你怎么知道ajax调用何时完成以及响应数据有多大?您仍然需要使用回调函数来执行此操作. (2认同)
  • 是的,当你可以访问数据时,你怎么知道? (2认同)