首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将json数据存储在代理模式内的变量中

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

Stack Overflow用户
提问于 2012-04-18 18:14:33
回答 2查看 287关注 0票数 0

我有这样的代码:

代码语言:javascript
复制
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/

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-18 18:16:52

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

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

代码语言:javascript
复制
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的上下文上的闭包:

代码语言:javascript
复制
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
});

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

票数 3
EN

Stack Overflow用户

发布于 2012-04-18 18:17:09

代码语言:javascript
复制
(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;
                 console.log(my.sampleData); // you get sample data after ajax response
              },
           'json');
        };
    }).apply(my);

    my.loadData();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10207297

复制
相关文章

相似问题

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