Я пытаюсь использовать API с https://www.themoviedb.org/. (Ключ бесплатный и может быть легко изменен, поэтому я включу его, потому что без него вы не сможете даже проверить свои функции).
Теперь мой 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. Похоже, что Googling указывает на проблему CORS, но насколько я знаю, страницы GitHub поддерживают CORS, поэтому я не знаю, что я делаю неправильно.
Хорошо выглядит, что skirtle был прав, проблема заключалась в том, что Firefox-аддон Privacy-Badger блокировал API. Сейчас я чувствую себя довольно глупо, но по крайней мере мой код теперь довольно чистый.
Я не пользователь 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);
});
api_key
к первоначальной ошибке, заключалась в использовании недействительного api_key
, что заставляет меня задуматься, не было ли это просто проблемой кэширования JS?