我创建了一个java脚本文件,用于从flickr获取图像。现在我希望可以全局访问这些数据。
$.getJSON('js/album.json', function(data) {
var myArray = data.children;
$.each(myArray, function(i, item) {
$.each(item.children, function(j, childItem){
var childName = childItem.name;
getFlickrImage(childName, handleData, data);
});
});
new_json = data;
});
我希望全局new_json
变量访问。经过谷歌搜索,我在这里发布了很多内容。
答案 0 :(得分:0)
回答你的问题,请记住,任何“全局变量”只是窗口对象的成员(在浏览器上工作时)。 所以你必须使用:
//...
window.new_json = data
//...
为了在代码的任何地方访问“new_json”。
但请记住,全局变量是邪恶的:)所以我至少会把它放在另一个对象中。
作为个人建议,我认为您应首先查看Jquery's Promises,因为您无法确保代码的其他地方正确实现new_json。或者也可以考虑其他设计模式(可能是模块模式),以使您的应用更清洁。
答案 1 :(得分:0)
到目前为止,这里有一些非常糟糕的答案。
在AJAX的异步世界中,您需要使用callbacks
进行操作。使用AJAX,您永远不会知道您所要求的数据何时(或者甚至是否)可用。这取决于客户端互联网连接,延迟,服务器速度,流量等等。
所以你必须这样做:
function doSomeAjaxCall(myCallback) {
$.getJSON('js/album.json', function(data) {
var myArray = data.children;
$.each(myArray, function(i, item) {
$.each(item.children, function(j, childItem){
var childName = childItem.name;
getFlickrImage(childName, handleData, data);
});
});
new_json = data;
myCallback.apply(window);
});
});
doSomeAjaxCall(function() {
console.log(new_json); //see? it is available globally.
});
答案 2 :(得分:-2)
你做不到。你必须同步拨打电话。
有关详细信息,请参阅this related question。