什么是jQuery' s。$ .getJSON`背后的魔力

时间:2017-08-30 17:39:17

标签: javascript jquery json jsonp

我正在尝试使用vanilla javascript从reddit中获取json数据,我发现了令人困惑的事情。我在这里找到了这个问题grabbing Reddit data via javascript 哪里有一个非常可靠的解决方案,使用jQuery。

这是他们分享的jsfiddle。 http://jsfiddle.net/DHKtW/353/我们可以看到$.getJSON正在运作。

所以我实现了我自己的getJSON函数:

  var getJSON = function(url, callback) {
      var xhr = new XMLHttpRequest();
      xhr.open('GET', url, true);
      xhr.responseType = 'json';
      xhr.onload = function() {
        var status = xhr.status;
        if (status === 200) {
          callback(null, xhr.response);
        } else {
          callback(status, xhr.response);
        }
      };
      xhr.send();
  };
  // let url = 'http://query.yahooapis.com/v1/public/yql?q=select%20%2a%20from%20yahoo.finance.quotes%20WHERE%20symbol%3D%27WRC%27&format=json&diagnostics=true&env=store://datatables.org/alltableswithkeys&callback';
  // let url = 'https://www.reddit.com/r/CryptoCurrency/.json?jsonp=?';
  let url = 'http://www.reddit.com/r/pics/.json?jsonp=?';
  getJSON(url , function(err, data) {
    if (err !== null) {
      console.log('Something went wrong: ' + err);
    } else {
      // console.log('Your query count: ' + data.query.count);
      console.log('Your query count: \n');
      console.log(data.query);
    }
  });

你可以在代码中看到我尝试了几个测试网址。 yahooapis.com工作正常,reddit没有。我认为这与jsonp有关。这是我设置的一个jsfiddle,用于演示我的代码不起作用。 https://jsfiddle.net/9ky480c8/这里发出的错误是请求必须通过https发送,而其他jsfiddle的情况并非如此。

任何人都知道如何用纯JavaScript来处理这个问题?

1 个答案:

答案 0 :(得分:0)

看起来您可以通过省略该查询参数来忽略JSONP问题。对于Reddit API,https://www.reddit.com/r/CryptoCurrency/.json似乎可以自行运行并返回纯正常的JSON。

如果您想使用JSONP,请查看JavaScript XMLHttpRequest using JsonP,了解使用纯Javascript和XHR进行此操作的方法。