Axios: 時々response.dataはオブジェクトではなく文字列です

作成日 2018年08月13日  ·  43コメント  ·  ソース: axios/axios

理由はわかりませんが、同じapiを使用すると、axiosのresponse.dataがオブジェクトではなく文字列になることがあります。 下の図を参照してください。

image

環境

  • axiosバージョン:0.18.0
  • 環境:React Native Expo SDK 29、ウィンドウ10

最も参考になるコメント

これは、サーバーからのjson応答が無効な場合に発生することがわかりました。https: //jsonlint.com/などのjsonバリデーターを使用して、jsonが正しくフォーマットされていることを確認してください。

全てのコメント43件

@ huy-lv、

content-typeは両方の応答で同じですか?

@robmcguinnessはい、それはapplication / jsonです

私は同じ振る舞いを見ます。 私の場合、API応答に無効なJSONデータが含まれることがあります。つまり、 JSON.parseがスローされます。 何らかの理由で、Axiosはこのエラーを飲み込んだようで、 dataプロパティに無効なJSON文字列を設定することになります。

私もこの問題を抱えています。 問題のケースのresponse.dataを確認すると、 "データなどの無効なJSON文字列が応答に追加され、JSON.parseでエラーが発生して文字列が返されます。

Axios、XMLHttpRequest、fetchで確認しました
1./AxiosとXMLHttpRequestで同じ問題が発生しました
2. /完全に作業をフェッチ

私はいくつかの文字がその問題につながる可能性があることを知っています、ただ確認する必要があります。
応答をキャプチャしてファイルとして添付できますか?

@OpenGG応答が遅れてすみません、ここで必要なもの:D
https://1drv.ms/t/s!AnakDtCf8CG5hIgn2Hemy6zanFi50Q

@ huy-lv私が期待しているものではありません。 応答をcurlで保存してから、保存したファイルをこの問題の応答領域にドロップして添付してください。

@ huy-lv

気にしないで、見つけた。
要旨に貼り付けて、axiosで読み込んでみましたが、エラーが表示されません。

ファイル: https
デモ: https

私は知っています、この問題は常に発生するわけではありません、それは10リクエストごとに約1〜2回です(同じAPI、同じ応答)

@OpenGGそれはReact-Nativeで起こります。 Webアプリは完全に機能します。

@ nighttiger1990

博覧会でオンラインデモを作って共有してもらえますか? このデモでは、AxiosとXMLHttpRequestの両方で同じリクエストを実行して、AxiosとRNのどちらがこの問題の原因であるかを判断する必要があります。

@OpenGGあなたは私にあなたのメールをくれますか私はあなたにAPIを送ります、私はそれを公表することはできません
https://github.com/nighttiger1990/axiosBug.git

この問題で運がいいですか? 私もそれに直面しています

@Druthiは、「

すべてのアップデート?

これはあなたの場合ではないかもしれませんが、私の場合:
私のAPI応答文字列は有効なJSONではないため、axiosはJSONに解析できず、代わりに生の文字列を返します。

アプリ(redux-saga、axios)をwebpack4に移行しましたが、response.dataはオブジェクトではなく文字列になりました。 私が行った移行の変更は、正常にコンパイルするために最小限です
package.json
"webpack": "^ 4.29.6"、
"webpack-cli": "^ 3.3.0"、
"webpack-dev-middleware": "^ 3.6.1"、
"webpack-dev-server": "^ 3.2.1"
"ファイルローダー": "^ 3.0.1"、

webpack-config.js
追加モード: '開発'、module.exportsに
コメントアウトされた色:true、devServerで
json-loaderをコメントアウトしました

JSON.parse(response.data)を実行しましたが、JSONが壊れています。 (予期しないトークン:JSONの位置8181)

            "municipality": "ddrNote": ""      should be

            "municipality": "",
            "addrNote": ""

response.dataのJSONがOK(オブジェクト)である移行前のwebpack3コードと比較しました。 したがって、移行されたコードはresponse.dataのJSONを破壊しているため、文字列として表示されます。 だから今問題はなぜJSONが壊れているのかということです

「webpack-dev-server」にダウングレードして問題を解決しました:「3.1.10」

3.1.10以降のバージョンの応答破損の原因であると思われるdevServerプロキシがあります

@petercuttingは実稼働環境でも問題ですよね。

@nyilmaz私の問題はwebpack-dev-serverが原因であることが判明しました。 webpack-dev-serverは本番環境では使用されません

@petercuttingはwebpack-dev-serverに対して問題を開きましたか? 見つかりませんでした。

@goodmorninggoaway覚えてい

webpack-dev-serverの問題に関係なく、AxiosはJSON.parse例外を黙って飲み込むべきではありませんよね?

バックエンドから不正な形式のJSONを送信して、アプリの堅牢性をテストしていました。 Axiosリクエストは、JSONのデコードにサイレントに失敗します。 ヘッダーcontent-typeまだ"application/json"と表示されていますが、 response.dataは未処理の未解析の文字列であり、フォローアップとしてアプリが予期せずクラッシュします。

星が60kのライブラリに、半年間このような基本的なバグがあるのは非常にクレイジーです:confused:

webpack-dev-serverの問題に関係なく、AxiosはJSON.parseの例外を黙って飲み込むべきではありませんよね?

完全に有効

反応ネイティブのためのこのバグの更新!?

これは、サーバーからのjson応答が無効な場合に発生することがわかりました。https: //jsonlint.com/などのjsonバリデーターを使用して、jsonが正しくフォーマットされていることを確認してください。

エラーを飲み込む問題は追跡されています。本質的に重複しているため、この問題を閉じます。

ご不明な点がございましたらお問い合わせください。

@ fed135 、もしあれば、関連する問題をリンクしてください、ありがとう。

誰かがこれをまだ解決しましたか?、私はAPIとしてlaravelを使用しているので、アプリに送信する前に応答をログに記録しました。 ログに記録された応答は有効なJSONですが、受信した応答の最後に最後の「}」ブレースがないため、無効な応答になっています。 これが私のモバイルアプリでこのように動作する理由はわかりません。axiosを使用するフロントエンドアプリでも問題なく動作し、郵便配達員でも試してみましたが、正常に動作します。 アイデアや解決策はありますか?

データが大きくなりすぎると発生します:(データ配列が小さかったので問題はありませんでした!

@matinzdデータをページ付けし、20のみを返します

@matinzdと、私のfronendアプリは同じエンドポイントを使用しますが、それは発生しません。reactNativeを使用するモバイルアプリのみが使用することがあります。

@ fed135これはフォローアップとして追跡するのに適切な問題ですか? #61

私のlaravelapiが一緒に文字列として出てきてください

私はついに私の解決策を見つけました。
私が得ていたデータは===でした

私は同じエラーがあります
:(

同じ問題が発生しました。jsonlint.comにチェックインした後、 NaNのデータがありますが、jsonは以下のように解析できません。 したがって、バックエンドが有効なJSONデータを送信したことを確認する必要があります。

Error: Parse error on line 186:
...,    "position_name": NaN,   "group_name": 
----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined'

同じエラー、誰がそれを修正できるか:|

☝️この問題に対処するために簡単なPRを行いました。 うまくいけば、それが役立つ

この問題をaxios0.19.2のreact-nativeで取得する
この問題に関する最新情報はありますか?

私はこれと同じ問題を抱えています、私はこの問題を解決しましたaxiosのメソッドを変更します、もしあなたが「GET」メソッドを持っていたならあなたはこの問題を得ることができるので本文を送ることができません働いている

このページは役に立ちましたか?
0 / 5 - 0 評価