1. ホーム
  2. javascript

[解決済み] JavaScript フェッチ - 'レスポンス'での 'json' の実行に失敗: ボディストリームがロックされている

2022-02-14 23:56:59

質問

リクエストステータスが400以上の場合(400、423、429の状態を試しました)、fetchは返されたjsonコンテンツを読み取ることができません。ブラウザのコンソールに次のようなエラーが表示されます。

Uncaught (in promise) TypeError: の 'json' の実行に失敗しました。 レスポンス」:ボディストリームがロックされている

返ってきたレスポンスオブジェクトの中身を表示してみると、以下のようになりました。

でも、数ヶ月前ならまだ使えるんですけどね。

質問は以下の通りです。

  • これはChromeブラウザだけの動作なのか、それともfetchの規格が変わったのか?
  • これらの状態のボディコンテンツを取得する方法はありますか?

追記:ブラウザのバージョンはGoogle Chrome 70.0.3538.102(正式版本)です。(64 位)

解決方法は?

MDNによると Response.clone() :

clone() メソッドの Response インターフェイスはレスポンスオブジェクトのクローンを作成し、 あらゆる点で同一ですが、異なる変数に格納されます。 主な理由 clone() の複数使用を可能にするためです。 Body オブジェクトが1回しか使えない場合。

:

fetch('yourfile.json').then(res=>res.clone().json())