Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过ajax获取json的类初始化总是失败_Javascript_Jquery - Fatal编程技术网

Javascript 通过ajax获取json的类初始化总是失败

Javascript 通过ajax获取json的类初始化总是失败,javascript,jquery,Javascript,Jquery,我是JavaScript的新手。我想创建一个类,在初始化时使用Ajax与Flickr Web API通信 Photo2.js var Photo2; Photo2 = (function() { Photo2.prototype.json = null; function Photo2() { $.getJSON('http://www.flickr.com/services/rest/?jsoncallback=?', { format

我是JavaScript的新手。我想创建一个类,在初始化时使用Ajax与Flickr Web API通信

Photo2.js

  var Photo2;

  Photo2 = (function() {

    Photo2.prototype.json = null;

    function Photo2() {
      $.getJSON('http://www.flickr.com/services/rest/?jsoncallback=?', {
        format: 'json',
        method: 'flickr.photos.search',
        api_key: '7965a8bc5a2a88908e8321f3f56c80ea',
        user_id: '29242822@N00',
        per_page: '100'
      }, function(data) {
        this.json = data.photos.photo;
      });
    }

    return Photo2;

  })();
但是当初始化为
photo2=newphoto2
时,它没有
photo2.json


谢谢你的好意

你真的应该重写你的代码。这很复杂,很难弄清楚你想要实现什么

首先,从服务器获取数据是异步的,所以您不能确定在创建Photo2
json
属性的实例之后是否会定义该属性

接下来,在初始化对象时进行服务器调用是一个非常糟糕的主意。我建议您采用以下解决方案:

(function() {
  var Photo2 = function(callback) {
    this.json = null;
  };

  Photo2.prototype.getData =  function(successCallback) {
    var self = this;

    $.getJSON('http://www.flickr.com/services/rest/?jsoncallback=?', {
        format: 'json',
        method: 'flickr.photos.search',
        api_key: '7965a8bc5a2a88908e8321f3f56c80ea',
        user_id: '29242822@N00',
        per_page: '100'
      }, function(data) {
        self.json = data.photos.photo;
        typeof successCallback == 'function' && successCallback();
      }); 
  };

  var photo = new Photo2();
  photo.getData(function successCallback() {
    console.log('Data loaded', photo.json);
  });
}).call(this);

这里的工作演示:

我不使用上面的方法,但是对于json回调,这通常意味着请求是带填充的json,我相信是
格式:“jsonp”
。谢谢您的建议。我尝试了
json
jsonp
,但都失败了。较新版本的jQuery似乎在使用$.getJSON获取jsonp时遇到了一些问题。您尝试过使用$.ajax吗?我认为您会遇到的问题是,
Photo2
仅在该上下文中定义,如果您想在该上下文之外执行
var Photo2=new Photo2()
,则应该失败。也许你想重写代码…谢谢你的建议。对不起,我忘了取支架了。上面的代码是最新的。我正在努力理解上面的代码。。。顺便说一句,你的JSBin工具很吸引人@威德:它不是我的:),但我真的建议你在共享JS代码时使用它。如果您还有其他问题,请随时在此提问。