javascript - 将 json 数据存储在代理模式内的变量中

标签 javascript jquery ajax

我有这个代码:

var my = {};

(function () { 
    var self = this;
    this.sampleData = { };

    this.loadData = function() {
       $.getJSON('http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?', 
          {tags: "cat", tagmode: "any", format: "json"},
          function(data){
             self.sampleData = data;
          }
       );
    };
}).apply(my);

my.loadData();
console.log(my.sampleData); // {}

问题是 my.sampleData 没有任何内容。

在这里尝试这个示例:http://jsfiddle.net/r57ML/

最佳答案

原因是 getJSON 调用是异步,因此您要在返回数据之前查找数据。相反,请直接或间接地将使用数据的代码放入回调内部

例如,您可以让您的 loadData 调用接受回调:

var my = {};

(function () { 
    var self = this;
    this.sampleData = { };

    this.loadData = function(callback) {
       $.getJSON('http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?', 
          {tags: "cat", tagmode: "any", format: "json"},
          function(data){
             self.sampleData = data;
             callback(); // <==== Call the callback
          }
       );
    };
}).apply(my);

my.loadData(function() { // <=== Pass in a callback
    console.log(my.sampleData); // Now the data is htere
});
<小时/>

旁注:由于您的 my 对象是单例,因此您可以稍微简化该代码,无需 applythisself,因为您的匿名函数是定义 my 的上下文的闭包:

var my = {};

(function () { 
    my.sampleData = { };

    my.loadData = function(callback) {
       $.getJSON('http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?', 
          {tags: "cat", tagmode: "any", format: "json"},
          function(data){
             my.sampleData = data;
             callback();
          }
       );
    };
})();

my.loadData(function() {
    console.log(my.sampleData); // Now the data is htere
});

当然,如果您使用构造函数或其他函数(您不在引用的代码中,但是......),那么您当然可能需要更复杂的结构。

关于javascript - 将 json 数据存储在代理模式内的变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10207297/

相关文章:

javascript - Rails 应用程序中的 AJAX 请求错误 : xhr. send( ( options.hasContent && options.data ) || null );

php - 在 php 循环中提交具有多个输入的 AJAx 表单

javascript - 检查循环中的条件

javascript - 如何强制Typescript中的所有变量都声明一个类型

javascript - 通过 Ajax 调用加载元素后,单击事件不起作用

jQuery 谷歌地图问题

javascript - 如何使用 javascript 复制此 css 媒体 jquery 以支持 IE

javascript - 数百个标记同时移动。表现不佳

Javascript错误加载图像淡入

asp.net - ajax文本框水印