2017-08-15 15 views
4

私はfetch()を使用して、apiサーバからデータを取得しています。私のエラーは次のようになります:fetch()予期しない入力の末尾

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)) 
+0

ブラウザコンソールでテストしたときにのみこのエラーが表示されます – Rowland

+0

問題は、取得した応答が有効なjsonではないことです( 'null'のように見えます) – nem035

答えて

13

クロスオリジンリソースにno-cors要求に対する応答は、response type of 'opaque'を有しています。レスポンスをJSONに変換する前にログに記録すると、「不透明」のタイプが表示されます。

不透明型は、listed as "severely restricted"です。

フィルタリングされたレスポンスはフィルタリングされたレスポンスで、タイプは "不透明"、url listは空のリスト、ステータスは0、ステータスメッセージは空のバイトシーケンス、ヘッダリストは空、ボディはヌル、予告編は空です。

このタイプは、タイプが不透明のときは現在読み取ることができません。

不透明な応答は、CORSヘッダーを返さない別の起源のリソースに対する要求です。不透明な応答では、返されたデータを読み取ることができないか、要求のステータスを見ることができません。つまり、要求が成功したかどうかを確認することはできません。現在のfetch()実装では、ウィンドウのグローバルスコープとは異なる起点のリソースを要求することはできません。

See Google's docs on the opaque type