#概要
WebAPIを叩いた時に下記のCORSに関するエラーが出ます。
Access to XMLHttpRequest at 'http://api.randomuser.me/api/' from origin 'http://127.0.0.1:5500' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.
#解決したいこと
外部APIからJSONデータを取得したい。
#ソースコード
javascript
1$(document).ready(function () { 2 console.log("aaa"); 3 $.ajax({ 4 url: 'http://api.randomuser.me/', 5 dataType: 'json', 6 headers: {'Access-Control-Allow-Origin': '*'}, 7 success: function(data){ 8 console.log(data); 9 }, 10 }); 11});
#確認したこと・試したこと
・jQuery自体は正常に動いています(上記cosole.log(“aaa”)
が出力された)。
・『CORSの問題はAJAXの仕様によるものなのでRailsを経由すると普通に取れる』という意見を別のところで頂いたので試しましたが同様のエラーが出ました(なぜRailsを経由すると取れるのか原理はよくわかりませんでした。。)。
・http://api.randomuser.me/ へ直接飛ぶとほしいJSONデータが見れました。
・fetchを使って、別のAPIを呼ぶと上手く呼べました。url部分をrandomuserに変えるとjQuery同様のエラーが出ます(jQueryを使ったのは公式のhow toにあったから)。
javascript
1//これは上手くAPIを呼べました。 2fetch('https://holidays-jp.github.io/api/v1/date.json') 3 .then(response => response.text()) 4 .then(text => { 5 console.log(text); 6 });
・fetchの場合オプションでmode: cors
を追記することと、レスポンスヘッダーを追記するべきという記事を見かけたので追記してみましたが同様の結果でした。
javascript
1fetch('http://api.randomuser.me/',{ 2//↓追記 3 mode: 'cors', 4 headers: new Headers({'Access-Control-Allow-Origin': '*'}), 5}) 6//↑追記 7 .then(response => response.JSON()) 8 .then(JSON => { 9 console.log(text); 10 });
//fetchで書いて出たエラー Access to fetch at 'http://api.randomuser.me/' from origin 'http://127.0.0.1:5500' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.
https://qiita.com/att55/items/2154a8aad8bf1409db2b
#自分なりの予測
preflight request = OPTIONリクエスト が「本来ほしい情報をリクエストする前にリクエストする事前確認」のリクエストということは分かりました。
そして解決策として、エラー中の「Redirect is not allowed for a preflight request.」
部分に対して、リクエストを単純リクエストに変更するのが良いのかと思いました。(https://developer.mozilla.org/ja/docs/Web/HTTP/CORS#Preflighted_requests)
ただ、現状methodはGET(デフォルト)=単純リクエストになっていると思うので、解決の糸口がつかめずにいます。オプションにmethod: ‘GET’を記述しても変わりませんでした。
#実行環境
ローカル環境で立ち上げています。
ファイル構造は下記の通りです。
dir
|--index.html
|--index.css
|--index.js
|--jquery.min.js
(その他示した方が良いことあればご指摘ください!)
よろしくお願いします!
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/20 00:37
2020/12/20 00:57
2020/12/20 02:09