如何在JQuery中存储JSON响应?
我想将我的json响应存储在全局变量中,因此,我可以通过我的应用程序使用它,而不会多次发出getJSON请求。如何在JQuery中存储JSON响应?
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);
}) ;
第一个日志是好的,第二个是不确定的。
编辑[从答案复制]:
实际上两者方法奏效
有趣的是,我的 请求是一个功能,我试图 进入电影我的全局变量后右 请求在同一功能
当我在功能外面加上它 它像一个魅力
如果您的真实代码是这样构建的,那么您在尝试访问尚未设置的数据时遇到问题尚未。仅仅因为您的$.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)并根据需要检索它。
我想如果它是可以的,一个简单的字符串,但实际上它是一个巨大的JSON对象 – soda01 2009-06-19 21:01:14
这是一种让您在一个$(document).ready()中设置变量并在不同的$(document).ready()中使用它的方法。 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']);
});
Transient link以上代码在jsbin中。
$ .myglobals = { 结果: “未设置” } $(文件)。就绪(函数(){ $ .getJSON( “panorama.json” 功能(JSON){ \t \t \t \t \t \t \t \t \t \t \t \t \t \t $ .myglobals.result = json.images [0] .src; \t \t \t \t console.log($。myglobals.result); \t \t \t }); \t \t \t \t \t \t console.log($。myglobals.result); }) 第一个日志是好的,但第二个是仍不明确 – soda01 2009-06-19 20:39:08
$ .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
});
});
我不知道你是否正在访问你的全局变量之前,它得到更新?从JQuery示例中:注意:请记住,该函数之后的那些行将在回调之前执行。 – 2009-06-19 21:28:11
你可能是正确的更新,但我怎么能告诉我的全局变量是否已经更新?或者我应该在哪里放我的请求,以便在我使用它之前更新我的全局变量,我唯一能想到的就是在请求的回调中写入所有内容,但这听起来很傻:) – soda01 2009-06-19 21:43:29