我想存储在一个全局变量的json响应的话,我可以用它在我的应用程序而不进行的getJSON请求不止一次。
var data;
$.getJSON("panorama.json",function(json){
data = json.images[0].src;
console.log(data);
});
console.log(data);
如果我登录它的实际要求其优良的,但我得到“未定义”在其他地方。 任何评论appriciated。
编辑[从评论复制]:试了...
$.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);
}) ;
第一个日志是好的,第二个是不确定的。
编辑[从答案复制]:
实际上这两种方法奏效
有趣的是,我的要求是一个函数,我试图在同一功能的请求之后进入电影我的全局变量
当我accesed它的功能外,它的工作就像一个魅力
如果你真正的代码的结构一样,那么你有一个问题,试图访问一个尚未设置的数据。 仅仅因为你的$.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");
}
你可以将它插入在DOM属性(如#ID),并根据需要进行检索。
这里有一个方法,可以让你设置一个$(文件)。就绪()的变量,并在不同的$(document)。就绪使用()。 myglobals
是一个命名空间对象,它可以说是降低你的全局变量与别人的碰撞的可能性,特别是如果你的名字的东西比更聪明“myglobals。”
$.myglobals = {
result: "unset"
}
$(document).ready(function() {
function pretend_JSON_call() {
$.myglobals.result = {'a':"hello", 'b':"world" };
}
pretend_JSON_call();
});
$(document).ready(function() {
alert($.myglobals.result['a']);
alert($.myglobals.result['b']);
});
瞬态链接到jsbin上面的代码。
$ .getJSON触发一个AJAX请求(在问题是异步的范围的关键字)。您的变量是未定义的,因为它没有被定义的是,所述响应还没有完成。 其他人建议在你的代码进一步向下移动你的console.log,但不能保证,除非你的逻辑与一个回调函数同步这将是可用的。 $ .getJSON接受一个回调函数作为其参数之一。
$.getJSON( "myData.json", function( data ) {
//Do whatever, this is a callback
$.each( data, function(key, val) {
//You can get even more specific like so
});
});