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

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

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

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

2回答

3755閲覧

React+whatwg-fetchでjsonデータを取得する際にエラーがでる

gksh7

総合スコア40

JavaScript

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2018/05/06 05:41

前提・実現したいこと

React+whatwg-fetchでjsonデータを取得しようとしています。

発生している問題・エラーメッセージ

return response.json() の記述のところで
次のエラーメッセージが表示されてしまいます。
Unhandled Rejection (SyntaxError): Unexpected token < in JSON at position 0

該当のソースコード

index.js

import React from 'react' import { render } from 'react-dom' import 'whatwg-fetch' class Main extends React.Component { constructor() { super(); this.state = { data: "", name: "", email: "" }; } componentDidMount() { this.getJsonData(); } getJsonData() { fetch('/apis/navi', { method: 'POST', mode: 'cors', credentials: 'include', body: JSON.stringify({ name: this.state.name, email: this.state.email, }) }).then(function(response) { return response.json() }).then(function(data) { this.setState({ data: data }); }); } render() { return( <div> <div>{this.state.data}</div> <div>{this.state.name}</div> <div>{this.state.email}</div> </div> ) } } render( <Main />, document.getElementById('root') )

apis/navi.json

[ { "id": 0, "name": "Erik Raymond", "work": "ForeTrust", "email": "erik.raymond@foretrust.net", "dob": "1941", "address": "31 Hill Street", "city": "Fresno", "optedin": true }, { "id": 1, "name": "Cory Risley", "work": "Zatheon", "email": "cory.risley@zatheon.gov", "dob": "1976", "address": "54 Harvard Avenue", "city": "Baltimore", "optedin": false } ]

補足情報

"react": "^16.3.2", "react-dom": "^16.3.2", "whatwg-fetch": "^2.0.4"

見よう見まねで組んでいる部分がありますので、おかしな記述があるかもしれません。
ご教示いただけますと幸いです。

よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

そのエラーメッセージはレスポンスとしてHTMLが返ってきてるパターンっぽいです。
POST /apis/navi でなにかエラーが起きて、エラー画面がHTMLで返ってきてるのでしょう。
return response.json()するまえにconsole.logするなどの方法でエラーメッセージを抽出してみてください。

投稿2018/05/06 05:46

set0gut1

総合スコア2413

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

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

gksh7

2018/05/06 05:57

ご回答ありがとうございます。助かります。 原因について理解しました。 よくよく確認してみたところ、そもそも、/apis/navi が not found になっていました。 /apis/navi.jsonをpublic配下に置いているのですが、そもそも、記述仕方が間違っているのでしょうか?
set0gut1

2018/05/06 06:04

見たところ、POSTを受け付けるAPIをまだ作ってないのでモックデータを置いてる感じですよね。ちょっと手元にないので勘でしか言えないのですが、`GET /apis/navi` `GET /apis/navi.json` `POST /apis/navi.json` のそれぞれを試してみて欲しいです。
gksh7

2018/05/06 06:20

ありがとうございます。感謝申し上げます。 アドバイスいただいた通り、 `GET /apis/navi` `GET /apis/navi.json` `POST /apis/navi.json` それぞれ試してみました。 `GET /apis/navi` でやってみたときに consoleをしたところ、下記のようなエラーが表示されました。 Promise {<rejected>: SyntaxError: Unexpected token < in JSON at position 0 at http://localhost:3000/static/js/bundle.…}__proto__: Promise[[PromiseStatus]]: "rejected"[[PromiseValue]]: SyntaxError: Unexpected token < in JSON at position 0 at http://localhost:3000/static/js/bundle.js:36241:30 まだ解決には至っていないのですが、もう少し、色々やってみます。 もし何か他に、お気付きの点がございましたらご教示いただけると大変助かります。 まずは御礼まで。
guest

0

自己解決

POSTでもGETもやめて(下記のコードで)、なんとか取得できました。
ご協力いただいた方、大変ありがとうございました。

getJsonData() { fetch('./apis/navi.json') // method: 'POST', // mode: 'cors', // credentials: 'include', // body: JSON.stringify({ // name: this.state.name, // email: this.state.email, // }), .then(response => { if(response.ok) { // ステータスがokならば console.log('OK') } else { console.log('NG') throw new Error(); } return response.json() }).then(json => { this.setState({ data: json }) }); }

投稿2018/05/06 07:46

gksh7

総合スコア40

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

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

set0gut1

2018/05/06 07:49 編集

これはGETですね。methodのデフォルト値がGETです。 /apis/navi.json で取得できたのと、あとコメントアウトした他の箇所に原因があったのかも知れないですね。おめでとうございます。
gksh7

2018/05/06 07:56

ご親切にありがとうございます。 デフォルトがGETなんですね。また一つ学びました。 まだまだ初心者で、今後もまたお世話になることがあるかもしれませんが、 引き続きどうぞよろしくお願い足します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問