質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

603閲覧

Javascriptのfetchが動きません

SatoKenta

総合スコア38

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2022/09/08 10:35

質問

はじめてfetchを使ったのですが色んなサンプルコードをコピってもうまくいきません。
試したコードのうち一つがこれですが、res.json()のところでどうしてもSyntaxError: Unexpected end of JSON inputとなります。
いろいろ書き方を変えたりしたのですが解消せず、、

javascript

1const fetchtest = async (credentials) => { 2 const url = "https://test.local/authenticate"; 3 const data = await fetch(url, { 4 method: 'POST', 5 headers: { 6 'Content-Type': 'application/json' 7 }, 8 body: JSON.stringify(credentials) 9 }).then(res=>res.json()); // これがエラー「Uncaught (in promise) SyntaxError: Unexpected end of JSON input」 10}; 11 12fetchtest({ 13 username: "test", 14 password: "test", 15}); 16

ブラウザの開発者ツールでレスポンスのペイロードを見ようとしたのですがThis request has no response data available.となってしまっています。ただ、サーバー側のログを見るとちゃんと200で返していて特にエラーにはなっていないです。

XMLHttpRequestを使うと何の問題もなく処理できるので、レスポンスはちゃんとJSONで返ってると思います。
こちらのコードだとブラウザの開発者ツールでもJSONの中身がちゃんと見れました。

javascript

1var xhttp = new XMLHttpRequest(); 2xhttp.onreadystatechange = function() { 3 if (this.readyState == 4) 4 if (this.status == 200) { 5 console.log(xhttp.responseText); // {"message": "OK"} のJSONレスポンス 6 } 7 } 8}; 9xhttp.open("POST", "https://test.local/authenticate", true); 10xhttp.send({ 11 username: "test", 12 password: "test", 13});

参考ですが、サーバー側はFlaskでこれを返してるだけです

python

1# Python3.8 2return Response( 3 response=json.dumps({"message": "OK"}), 4 status=200, 5 mimetype='application/json' 6)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/09/08 11:01

.json()ではなくconsole出力してみては。 .then(data => console.log(data))
SatoKenta

2022/09/11 01:46

コードのミスで、Flaskでステータス200ではなく204を返してしまってる場合がありました 204はNo Contentなのでいくらペイロードを設定しても中身は空っぽでJSONとしてパースできてませんでした。
guest

回答2

0

自己解決

コードのミスで、Flaskでステータス200ではなく204を返してしまってる場合がありました
204の場合はペイロードは無視されるのですね
お騒がせしてすいません

投稿2022/09/11 01:46

SatoKenta

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

単純に戻り値がjsonではないということでしょう
以下のようにエラーを拾ってください

javascript

1const fetchtest = async (credentials) => { 2 const url = "https://test.local/authenticate"; 3 const data = await fetch(url, { 4 method: 'POST', 5 headers: { 6 'Content-Type': 'application/json' 7 }, 8 body:JSON.stringify(credentials) 9 }).then(res=>{ 10 if(res.ok) return res.json(); 11 throw new Error(res.status); 12 }).catch(e=>{ 13 console.error(e); 14 return "failed"; 15 }); 16 console.log(data); 17}; 18 19fetchtest({ 20 username: "test", 21 password: "test", 22});

投稿2022/09/09 00:26

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問