我尝试使用https://www.themoviedb.org/中的API。 (密钥是免费的,可以轻松更改,因此我将其包含在内,因为没有密钥,您甚至无法测试其功能。)
现在我的JavaScript在FF托管本地时工作正常,但在GitHub页面上没有。
这是一个不起作用的功能。错误是:
NetworkError:发生网络错误。
......它似乎发生在bhttp.send();
之后。
function getMovieDetails() {
var reqURL = "https://api.themoviedb.org/3/movie/latest?api_key=afe4e10abbb804e2b4a4f8a3ef067ad5&language=en-US";
var bhttp = new XMLHttpRequest();
bhttp.open("GET", reqURL, false);
bhttp.setRequestHeader("Content-type", "json");
bhttp.send();
var response = JSON.parse(bhttp.responseText);
var str = JSON.stringify(response, null, 2);
return response;
}
console.log(getMovieDetails());

在Chrome中运行良好。谷歌搜索似乎表明这是一个CORS问题,但据我所知,GitHub页面支持CORS,所以我不知道我做错了什么。
答案 0 :(得分:1)
我不是firefox用户,因此您需要对此进行测试。但是如果异步阻塞理论是真的,这应该有效。
我已将其修改为使用简单的回调,个人我不会使用回调但会做出承诺,但这是另一个问题:)
function getMovieDetails(callback) {
var reqURL = "https://api.themoviedb.org/3/movie/latest?api_key=afe4e10abbb804e2b4a4f8a3ef067ad5&language=en-US";
var bhttp = new XMLHttpRequest();
bhttp.open("GET", reqURL, true);
bhttp.setRequestHeader("Content-type", "json");
bhttp.onload = function() {
if (bhttp.readyState === 4) {
if (bhttp.status === 200) {
callback(JSON.parse(bhttp.responseText));
} else {
console.error(bhttp.statusText);
}
}
};
bhttp.send();
}
getMovieDetails(function (movie) {
console.log(movie);
});

答案 1 :(得分:-1)
好吧看起来裙子是正确的,问题是firefox插件Privacy-Badger阻止API。我觉得现在很傻,但至少我的代码现在很干净。