如何在jQuery中存储JSON响应?

sod*_*a01 4 jquery json response save

我想将我的json响应存储在一个全局变量中,所以,我可以通过我的应用程序使用它,而不必多次发出getJSON请求.

var data;
$.getJSON("panorama.json",function(json){
data = json.images[0].src;
console.log(data);          
});


console.log(data);
Run Code Online (Sandbox Code Playgroud)

如果我在实际请求中记录它很好,但我在其他地方得到"未定义".评论任何评论.

编辑[从评论中复制]:试过......

$.myglobals = { result: "unset" } 

$(document).ready(function() { 

  $.getJSON( "panorama.json", function(json) { 
    $.myglobals.result = json.images[0].src; 
    console.log($.myglobals.result);     
  });

  console.log($.myglobals.result); 
}) ;
Run Code Online (Sandbox Code Playgroud)

第一个日志没问题,第二个日志未定义.

编辑[从答案中复制]:

实际上两种方法都有效

有趣的是,我的请求是在一个函数中,我试图在同一函数中的请求后立即访问我的全局变量

当我在功能之外加入它时,它就像一个魅力

Dam*_*kić 8

如果你真正的代码的结构一样,那么你有一个问题,试图访问尚未设置的数据还没有.仅仅因为你$.getJSON()的上述console.log()并不意味着你在记录数据值之前得到了响应.

所以你的问题不是范围,而是时间:引入一些服务器端延迟,你的解决方案也可能崩溃.

如果收到回复,也许你应该设置一些标志:

var data, dataReceived = false;

$.getJSON("panorama.json",function(json){
  data = json.images[0].src;
  dataReceived = true;
  console.log(data);                    
});


// somwhere later
if (dataReceived) {
  console.log(data);
} else {
  // you could use setTimeout() or setInterval here to re-check
  console.log("data not received yet");
}
Run Code Online (Sandbox Code Playgroud)