我创建了一个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变量的全局访问。我试了很多次,在google上搜索了这么多之后,我在这里发布了。
发布于 2013-12-18 12:18:45
到目前为止这里有一些很糟糕的答案。
在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.
});发布于 2013-12-18 12:01:31
在回答您的问题时,请记住,任何“全局变量”都只是窗口对象的一个成员(在浏览器上工作时)。所以你只需要用:
//...
window.new_json = data
//...以便访问代码中任何地方的"new_json“。
但是请记住,全局变量是有害的:)所以我至少会把它放在另一个对象中。
作为个人建议,我认为您应该先看看Jquery的承诺,因为您无法确保代码中的其他部分能够正确地实现new_json。或者也可以考虑其他设计模式(模块模式,也许),以使您的应用程序更干净。
发布于 2013-12-18 12:07:41
你不能。你必须同步打电话。
有关详细信息,请参阅这个相关的问题。
https://stackoverflow.com/questions/20657535
复制相似问题