首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中全局使用ajax调用下的变量

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

Stack Overflow用户
提问于 2013-12-18 11:55:48
回答 3查看 110关注 0票数 3

我创建了一个java脚本文件,它可以从flickr获取图像。现在我希望这些数据可以在全球范围内访问。

代码语言:javascript
复制
$.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上搜索了这么多之后,我在这里发布了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-18 12:18:45

到目前为止这里有一些很糟糕的答案。

在AJAX的异步世界中,您需要使用callbacks进行操作。使用AJAX,您永远不知道所要求的数据何时(甚至可能)可用。它取决于客户端的互联网连接、延迟、服务器的速度、流量等。

所以你必须这样做:

代码语言:javascript
复制
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.
});
票数 0
EN

Stack Overflow用户

发布于 2013-12-18 12:01:31

在回答您的问题时,请记住,任何“全局变量”都只是窗口对象的一个成员(在浏览器上工作时)。所以你只需要用:

代码语言:javascript
复制
//...
window.new_json = data
//...

以便访问代码中任何地方的"new_json“。

但是请记住,全局变量是有害的:)所以我至少会把它放在另一个对象中。

作为个人建议,我认为您应该先看看Jquery的承诺,因为您无法确保代码中的其他部分能够正确地实现new_json。或者也可以考虑其他设计模式(模块模式,也许),以使您的应用程序更干净。

票数 0
EN

Stack Overflow用户

发布于 2013-12-18 12:07:41

你不能。你必须同步打电话。

有关详细信息,请参阅这个相关的问题

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20657535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档