我正在尝试使用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来处理这个问题?
答案 0 :(得分:0)
看起来您可以通过省略该查询参数来忽略JSONP问题。对于Reddit API,https://www.reddit.com/r/CryptoCurrency/.json似乎可以自行运行并返回纯正常的JSON。
如果您想使用JSONP,请查看JavaScript XMLHttpRequest using JsonP,了解使用纯Javascript和XHR进行此操作的方法。