Axios: Manchmal ist response.data ein String statt eines Objekts

Erstellt am 13. Aug. 2018  ·  43Kommentare  ·  Quelle: axios/axios

Ich weiß nicht warum, aber mit der gleichen API ist die response.data von Axios manchmal eine Zeichenfolge anstelle eines Objekts. Siehe die Abbildung unten.

image

Kontext

  • Axios-Version: 0.18.0
  • Umgebung: React native Expo SDK 29, Fenster 10

Hilfreichster Kommentar

Ich habe festgestellt, dass dies passiert, wenn die Json-Antwort vom Server ungültig ist. Verwenden Sie einen Json-Validator wie https://jsonlint.com/ , um sicherzustellen, dass Ihr Json richtig formatiert ist

Alle 43 Kommentare

@huy-lv,

Ist content-type für beide Antworten gleich?

@robmcguinness Ja, es ist application/json

Ich sehe das gleiche Verhalten. Ich habe festgestellt, dass in meinem Fall die API-Antwort manchmal ungültige JSON-Daten enthält, dh JSON.parse würde werfen. Aus irgendeinem Grund scheint Axios diesen Fehler zu verschlucken und setzt schließlich den ungültigen JSON-String auf die Eigenschaft data .

Ich habe dieses Problem auch. Wenn ich response.data des Problemfalls überprüfe, werden einige ungültige JSON-Strings wie " Daten zur Antwort hinzugefügt, die dazu führen, dass JSON.parse einen Fehler erhält und einen String zurückgibt.

Ich habe mit Axios, XMLHttpRequest, fetch überprüft
1./ Axios und XMLHttpRequest haben das gleiche Problem
2./ holen funktioniert einwandfrei

Ich weiß, dass es einige Zeichen gibt, die zu diesem Problem führen können, müssen Sie nur sicher sein.
Könnten Sie die Antwort erfassen und als Datei anhängen?

@OpenGG entschuldige die späte Antwort, was du hier brauchst :D
https://1drv.ms/t/s!AnakDtCf8CG5hIgn2Hemy6zanFi50Q

@huy-lv Nicht das, was ich erwarte. Bitte speichern Sie die Antwort mit curl und hängen Sie dann die gespeicherte Datei an, indem Sie sie im Antwortbereich dieser Ausgabe ablegen.

@huy-lv

Egal, habs gefunden.
Ich habe es in Gist eingefügt und versucht, mit Axios zu laden, kann keinen Fehler sehen.

Datei: https://gist.github.com/OpenGG/ac72e79f9ef088e993213473116c0cd0
Demo: https://codepen.io/OpenGG/pen/bxEqKL

Ich weiß, dieses Problem tritt nicht die ganze Zeit auf, es ist ungefähr 1-2 Mal pro 10 Anfragen (die gleiche API, gleiche Antwort)

@OpenGG passiert es auf React-Native. Web-App funktioniert einwandfrei.

@nighttiger1990

Könnten Sie eine Online-Demo auf der Expo erstellen und teilen? Diese Demo sollte dieselbe Anfrage mit Axios und XMLHttpRequest stellen, um festzustellen, ob Axios oder RN dieses Problem verursachen.

@OpenGG kannst du mir deine Mail geben, ich schicke dir eine API, ich kann das nicht veröffentlichen
https://github.com/nighttiger1990/axiosBug.git

Haben Sie Glück mit diesem Problem? ich stehe auch davor

@Druthi verwende jetzt 'fetch' anstelle von 'axios'

irgendein Update?

Dies ist möglicherweise nicht Ihr Fall, aber in meinem Fall:
Meine API-Antwortzeichenfolge ist kein gültiger JSON, daher kann axios nicht in JSON geparst werden und gibt stattdessen eine Rohzeichenfolge zurück.

Ich habe meine App (redux-saga,axios) auf webpack4 migriert und jetzt ist response.data ein String statt eines Objekts. Die von mir vorgenommenen Migrationsänderungen sind minimal, um erfolgreich zu kompilieren
Paket.json
"webpack": "^4.29.6",
"webpack-cli": "^3.3.0",
"webpack-dev-middleware": "^3.6.1",
"webpack-dev-server": "^3.2.1"
"Dateilader": "^3.0.1",

webpack-config.js
Modus hinzugefügt: 'Entwicklung', zu module.exports
auskommentierte Farben: true, in devServer
json-loader auskommentiert

Ich habe JSON.parse(response.data) ausgeführt und das JSON ist beschädigt. (Unerwartetes Token: in JSON an Position 8181)

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

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

Ich habe mit meinem Webpack3-Code vor der Migration verglichen, bei dem der JSON in response.data OK ist (Objekt). Der migrierte Code schafft es also, den JSON in response.data zu beschädigen, und deshalb wird er als String angezeigt. Jetzt stellt sich also die Frage, warum der JSON korrupt ist

Ich habe das Problem durch ein Downgrade auf "webpack-dev-server" gelöst: "3.1.10"

Ich habe einen devServer-Proxy, von dem ich denke, dass er die Ursache für die Antwortbeschädigung für Versionen größer als 3.1.10 ist

@petercutting es ist auch ein Problem in der Produktionsumgebung, haben Sie es nicht beobachtet?

@nyilmaz Es stellte sich heraus, dass mein Problem vom webpack-dev-server verursacht wurde. webpack-dev-server würde in einer Produktionsumgebung nicht verwendet werden

@petercutting hast du ein Problem gegen webpack-dev-server geöffnet? konnte ich nicht finden.

@goodmorninggoaway Ich erinnere mich nicht. wahrscheinlich nicht

Ungeachtet der Probleme mit dem Webpack-Dev-Server sollte Axios JSON.parse Ausnahmen nicht stillschweigend schlucken, oder?

Ich habe gerade die Robustheit einer App getestet, indem ich fehlerhaftes JSON vom Back-End gesendet habe. Die Axios-Anforderung kann das JSON im Hintergrund nicht decodieren. Der Header content-type sagt immer noch "application/json" , aber response.data ist die rohe, ungeparste Zeichenfolge, und meine App stürzt als Folgemaßnahme unerwartet ab.

Es ist ziemlich verrückt, dass eine Bibliothek mit 60.000 Sternen ein halbes Jahr lang so einen grundlegenden Fehler hat :confused:

Unabhängig von den Problemen mit dem Webpack-Dev-Server sollte Axios nicht stillschweigend JSON.parse-Ausnahmen schlucken, oder?

Eindeutig gültig

Irgendein Update zu diesem Fehler für nativ reagieren!?

Ich habe festgestellt, dass dies passiert, wenn die Json-Antwort vom Server ungültig ist. Verwenden Sie einen Json-Validator wie https://jsonlint.com/ , um sicherzustellen, dass Ihr Json richtig formatiert ist

Das Problem beim Schlucken des Fehlers wird verfolgt, ich werde dieses Problem schließen, da es im Wesentlichen ein Duplikat davon ist.

Bitte melden Sie sich, wenn Sie Fragen haben.

@fed135 Bitte verlinken Sie

Hat das schon jemand gelöst?, Ich verwende Laravel als meine API, also habe ich meine Antwort protokolliert, bevor ich sie an meine App gesendet habe. Die protokollierte Antwort ist eine gültige JSON, aber bei der empfangenen Antwort fehlt am Ende die letzte geschweifte Klammer "}", was sie zu einer ungültigen Antwort macht. Ich weiß nicht, warum sich das auf meiner mobilen App so verhält, denn für die Frontend-App, die auch Axios verwendet, funktioniert es gut, auch am Postboten ausprobiert, funktioniert es gut. irgendwelche ideen oder lösungen pls??

Es passiert, wenn die Daten zu groß werden :( Ich hatte keine Probleme, da das Datenarray klein war!

@matinzd Ich paginiere meine Daten und

@matinzd und auch meine Fronend-App verwendet den gleichen Endpunkt, und das ist nicht der Fall, nur die mobile App mit Reaction Native tut es manchmal

@fed135 Ist dies das richtige Problem, um es

bitte kommt meine laravel api als string daneben

Ich habe endlich eine Lösung für meine gefunden.
Die Daten, die ich bekam, waren ===

Ich habe den gleichen Fehler
:(

Habe das gleiche Problem, nachdem ich jsonlint.com eingecheckt habe, habe ich die Daten mit NaN die json nicht wie unten analysieren kann. Daher müssen wir sicherstellen, dass unser Backend die gültigen JSON-Daten gesendet hat.

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

Gleicher Fehler, wer kann ihn beheben :|

☝️ Ich habe eine kurze PR gemacht, um dieses Problem anzugehen. Hoffentlich hilft es

Erhalten dieses Problems in Reactive-native mit axios 0.19.2
Irgendein Update zum Thema?

Ich habe das gleiche Problem, ich habe dieses Problem gelöst Ändern Sie die Methode von Axios. Wenn Sie die Methode 'GET' hatten, können Sie keinen Körper senden, da Sie dieses Problem erhalten können. Um dies zu lösen, müssen Sie zu 'POST' wechseln und es wird arbeite

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen