fetch() 予期せぬ入力の終了
質問
fetch()を使って、apiサーバーからデータを取得しています。私のエラーは次のようになります。
Uncaught (in promise) SyntaxError: Unexpected end of input at
fetch.then.blob.
何が間違っているのか、教えてください。
const weatherAPi ='https://www.metaweather.com/api/location/523920';
fetch(weatherAPi, {
mode: 'no-cors'
}).then(blob => blob.json())
.then(data => console.log(data))
どのように解決するのですか?
不透明なレスポンス
のレスポンスは
no-cors
リクエストのレスポンスには、クロスオリジンリソースへの
のレスポンスタイプは 'opaque' です。
. レスポンスを JSON に変換する前にログに記録すると、"opaque" というタイプが表示されます。
不透明な型は は "severely restricted" としてリストされています。 として、whatwg.org の fetch spec で説明されています。
opaqueフィルタリングされたレスポンスは、タイプが "opaque"、URLリストが空リスト、ステータスが0、ステータスメッセージが空のバイト列、ヘッダーリストが空、ボディがNULL、トレーラが空のフィルタリングされたレスポンスのことです。
で説明されているように、タイプが不透明な場合は現在読み取ることができません。 Google の opaque 型に関するドキュメント .
不透明な応答は、CORS ヘッダーを返さない異なるオリジンのリソースに対して行われた要求に対するものです。不透明な応答では、返されたデータを読んだり、要求の状態を表示したりすることはできません。現在の fetch() の実装では、window グローバル スコープと異なるオリジンのリソースに要求を行うことはできません。
サーバーで CORS サポートを有効にする
これは、環境に依存する場合と言語に依存する場合があります。例えば、サーバーの設定を変更することでNginxの環境内でCORSの設定を変更したり、PHPなどのアプリケーションのコード内でヘッダーを指定したりすることができます。
を読むことを強くお勧めします。 CORS リクエストに関する Mozilla のドキュメント そしてまた アクセス制御-許可-オリジン .
PHPでの例です。
<?php
header("Access-Control-Allow-Origin: *"); // "*" could also be a site such as http://www.example.com
関連
-
[解決済み] jQueryで入力を無効化/有効化する?
-
[解決済み] REST APIからデータを取得しようとしたときに、要求されたリソースに'Access-Control-Allow-Origin'ヘッダーが存在しない。
-
[解決済み] Reduxの非同期フローになぜミドルウェアが必要なのか?
-
[解決済み] フェッチする JSONデータをPOSTする
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] 変異を伴わないオブジェクトからの値の削除
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] 文字列がhtmlであるかどうかをチェックする
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] JavaScriptで長い配列を小さい配列に分割する方法
-
[解決済み] なぜjavascriptのES6 Promisesはresolve後も実行を継続するのですか?
-
[解決済み] 変異を伴わないオブジェクトからの値の削除