Firefox CORS проблема с JSON

1

Я пытаюсь использовать 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, поэтому я не знаю, что я делаю неправильно.

  • 0
    Просто удар в темноте, но использование запросов синхронизации плохо и не рекомендуется, поэтому мне интересно, блокирует ли это FF?
  • 0
    Да, это отображается в консоли, но поскольку он работает локально, я подумал, что он работает и на хосте. Какой подход сделать это лучше?
Показать ещё 2 комментария
Теги:
cors

2 ответа

0
Лучший ответ

Хорошо выглядит, что skirtle был прав, проблема заключалась в том, что Firefox-аддон Privacy-Badger блокировал API. Сейчас я чувствую себя довольно глупо, но по крайней мере мой код теперь довольно чистый.

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);
});
  • 0
    Похоже, что это действительно проблема синхронизации / асинхронности, я все еще новичок в работе с webdev, поэтому я пока не знаю много лучших практик.
  • 0
    Рад, что это исправлено, но я не уверен, что это была проблема синхронизации / асинхронности. Я попытался использовать страницы Firefox и GitHub с исходным кодом синхронизации, и все работало нормально. Одна вещь, которую я попробовал, которая api_key к первоначальной ошибке, заключалась в использовании недействительного api_key , что заставляет меня задуматься, не было ли это просто проблемой кэширования JS?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню