【问题标题】:use variable under ajax call globally in javascript [duplicate]在javascript中全局使用ajax调用下的变量[重复]
【发布时间】:2015-04-15 02:23:44
【问题描述】:

我创建了一个从 flickr 获取图像的 java 脚本文件。现在我希望可以全局访问这些数据。

$.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 变量。我尝试了很多,在谷歌上搜索了这么多之后,我在这里发布了。

【问题讨论】:

  • 你不能。欢迎来到异步世界。
  • :( 有同步方式可以提供帮助吗?@David
  • new_json 全局可用(因为你还没有使用过var),但在服务器返回响应之前,全局不可用。
  • 我知道@Adam,但还有其他方法吗?
  • @user3115091 - 请参阅下面的答案。在处理异步编程时,您需要使用callback 函数(或事件)。以callbacks开头。

标签: javascript jquery ajax


【解决方案1】:

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

在 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.
});

【讨论】:

  • 感谢@Adam 您的回答有帮助。 :)
  • 很好奇,投反对票的人怎么了?诚然,这不是唯一的方法,但还有大约十种不同的方法,这只是一种方法的示例。
【解决方案2】:

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

//...
window.new_json = data
//...

为了在代码的任何地方访问“new_json”。

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

作为个人建议,我认为您应该先查看Jquery's Promises,因为您无法确保代码中的其他地方 new_json 已正确实现。或者也可以考虑其他设计模式(可能是模块模式)以使您的应用程序更整洁。

【讨论】:

    【解决方案3】:

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

    更多信息请参见this related question

    【讨论】:

    • 这个答案是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    相关资源
    最近更新 更多