Axios: Иногда response.data представляет собой строку вместо объекта

Созданный на 13 авг. 2018  ·  43Комментарии  ·  Источник: axios/axios

Я не знаю почему, но с тем же api иногда axios response.data представляет собой строку вместо объекта. См. Рисунок ниже.

image

Контекст

  • версия axios: 0.18.0
  • Среда: React native Expo SDK 29, окно 10

Самый полезный комментарий

Я обнаружил, что это происходит, когда ответ json от сервера недействителен, используйте валидатор json, например https://jsonlint.com/, чтобы убедиться, что ваш json правильно отформатирован

Все 43 Комментарий

@ huy-lv,

content-type одинаковы для обоих ответов?

@robmcguinness Да, это приложение / json

Я наблюдаю такое же поведение. Я обнаружил, что в моем случае ответ API иногда может содержать недопустимые данные JSON, то есть JSON.parse выдает. По какой-то причине Axios, кажется, проглатывает эту ошибку и в конечном итоге устанавливает недопустимую строку JSON в свойстве data .

У меня тоже есть эта проблема. Когда я проверяю response.data проблемного случая, в ответ добавляется некоторая недопустимая строка JSON, например " data, из-за чего JSON.parse получает ошибку и возвращает строку.

Я проверил с помощью Axios, XMLHttpRequest, fetch
1. / Axios и XMLHttpRequest имеют ту же проблему
2. / fetch работает отлично

Я знаю, что есть некоторые символы, которые могут привести к этой проблеме, просто нужно быть уверенным.
Не могли бы вы записать ответ и прикрепить его как файл?

@OpenGG извините за поздний ответ, что вам здесь нужно: D
https://1drv.ms/t/s!AnakDtCf8CG5hIgn2Hemy6zanFi50Q

@ huy-lv Не то, что я ожидал. Сохраните ответ с помощью curl, затем прикрепите сохраненный файл, перетащив его в область ответа на эту проблему.

@ huy-lv

Неважно, нашел.
Я вставил его в суть и попытался загрузить с помощью аксиомов, не вижу никаких ошибок.

файл: https://gist.github.com/OpenGG/ac72e79f9ef088e993213473116c0cd0
демо: https://codepen.io/OpenGG/pen/bxEqKL

я знаю, эта проблема возникает не все время, примерно 1-2 раза на каждые 10 запросов (тот же API, тот же ответ)

@OpenGG это происходит на React-Native. Веб-приложение работает отлично.

@ nighttiger1990

Не могли бы вы сделать онлайн-демонстрацию на выставке и поделиться ею? Эта демонстрация должна сделать один и тот же запрос как с Axios, так и с XMLHttpRequest, чтобы определить, является ли Axios или RN причиной этой проблемы.

@OpenGG, можешь дать мне свою почту, я пришлю тебе api, я не могу публиковать это
https://github.com/nighttiger1990/axiosBug.git

Удачи с этой проблемой? Я тоже с этим сталкиваюсь

@Druthi теперь я использую 'fetch' вместо 'axios'

какое-нибудь обновление?

Возможно, это не ваш случай, но в моем случае:
Моя строка ответа 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
добавлен режим: 'development', в module.exports
закомментировал цвета: правда, в devServer
закомментировал json-loader

Я запустил JSON.parse (response.data), и JSON поврежден. (Неожиданный токен: в JSON на позиции 8181)

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

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

Я сравнил с моим кодом webpack3 перед миграцией, где JSON в response.data в порядке (объект). Таким образом, перенесенному коду удается повредить JSON в response.data, и поэтому он отображается в виде строки. Итак, теперь вопрос в том, почему JSON поврежден.

Я решил проблему, перейдя на "webpack-dev-server": "3.1.10"

У меня есть прокси-сервер devServer, который, я думаю, является причиной повреждения ответа для версий выше 3.1.10.

@petercutting - это тоже проблема в производственной среде, разве вы не заметили?

@nyilmaz, моя проблема оказалась вызвана webpack-dev-server. webpack-dev-server не будет использоваться в производственной среде

@petercutting вы открывали проблему с webpack-dev-сервером? Я не мог найти дальше.

@goodmorninggoaway Я не помню. возможно нет

Независимо от проблем с webpack-dev-server, Axios не должен молча проглатывать исключения JSON.parse , верно?

Я просто проверял надежность приложения, отправляя искаженный JSON из бэкэнда. Запрос Axios молча не может декодировать JSON. В заголовке content-type прежнему написано "application/json" , но response.data - это необработанная неанализируемая строка, и мое приложение неожиданно аварийно завершает работу.

Довольно безумие, что в библиотеке с 60к звезд уже пол года есть такой базовый баг: confused:

Независимо от проблем с webpack-dev-server, Axios не должен молча проглатывать исключения JSON.parse, верно?

Частично действительный

Любое обновление по этой ошибке для реагирования на родной !?

Я обнаружил, что это происходит, когда ответ json от сервера недействителен, используйте валидатор json, например https://jsonlint.com/, чтобы убедиться, что ваш json правильно отформатирован

Проблема с проглатыванием отслеживается, я закрою эту проблему, так как по сути это ее дубликат.

Если у вас есть вопросы, свяжитесь с нами.

@ fed135, пожалуйста,

Кто-нибудь еще решил это? Я использую laravel в качестве своего API, поэтому я зарегистрировал свой ответ, прежде чем отправлять его в свое приложение. Записанный ответ является допустимым JSON, но в полученном ответе отсутствует последняя скобка "}" в конце, что делает его недопустимым. Я не знаю, почему это ведет себя так в моем мобильном приложении, потому что для внешнего приложения, которое также использует аксиомы, оно работает нормально, тоже пробовал на почтальоне, он отлично работает. любые идеи или решения, пожалуйста ??

Это происходит, когда данные становятся слишком большими :( У меня не было никаких проблем, так как массив данных был маленьким!

@matinzd Я

@matinzd, а также мое внешнее приложение использует ту же конечную точку, и этого не происходит, иногда только мобильное приложение с встроенным реагированием

@ fed135 Правильно ли

пожалуйста, мой laravel api выходит в виде строки рядом с

Я наконец нашел решение для своего.
Данные, которые я получал, были ===

У меня такая же ошибка
:(

Получил ту же проблему, после проверки на jsonlint.com у меня есть данные с NaN которые json не может проанализировать, как показано ниже. Поэтому нам нужно убедиться, что наш бэкэнд отправил действительные данные JSON.

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

Та же ошибка, кто может исправить: |

☝️ Я сделал быстрый пиар, чтобы решить эту проблему. Надеюсь, это поможет

Получение этой проблемы в react-native с помощью axios 0.19.2
Есть новости по проблеме?

У меня такая же проблема, я решил эту проблему, измените метод axios, если у вас был метод GET, вы не можете отправить тело, потому что вы можете получить эту проблему, чтобы решить эту проблему, вам нужно изменить на POST, и он будет работать

Была ли эта страница полезной?
0 / 5 - 0 рейтинги