使用JSON的Firefox CORS问题

时间:2017-09-09 22:32:03

标签: javascript json cors

我尝试使用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,所以我不知道我做错了什么。

2 个答案:

答案 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。我觉得现在很傻,但至少我的代码现在很干净。