在javascript中全局使用ajax调用下的变量

时间:2013-12-18 11:55:49

标签: javascript jquery ajax

我创建了一个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变量访问。经过谷歌搜索,我在这里发布了很多内容。

3 个答案:

答案 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