我不知道为什么但是使用相同的 api,有时 axios 的 response.data 是字符串而不是对象。 见下图。
@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./ fetch 工作完美
我知道有一些字符会导致这个问题,只需要确定。
您能否捕获响应并将其附加为文件?
@OpenGG抱歉回复晚了,你需要什么:D
https://1drv.ms/t/s!AnakDtCf8CG5hIgn2Hemy6zanFi50Q
@huy-lv 不是我所期望的。 请使用 curl 保存回复,然后通过将保存的文件拖放到此问题的回复区域来附加保存的文件。
我知道,这个问题不会一直发生,每 10 个请求大约 1-2 次(相同的 API,相同的响应)
@OpenGG它发生在 React-Native 上。 Web App 完美运行。
@nighttiger1990
你能在世博会上做一个在线演示,分享一下吗? 这个demo应该对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 是一个字符串而不是对象。 我所做的迁移更改很少能成功编译
包.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
注释掉颜色:true,在 devServer 中
注释掉 json-loader
我运行 JSON.parse(response.data) 并且 JSON 已损坏。 (意外令牌:JSON 格式,位置 8181)
"municipality": "ddrNote": "" should be
"municipality": "",
"addrNote": ""
我与我的迁移前 webpack3 代码进行了比较,其中 response.data 中的 JSON 是好的(对象)。 因此,迁移的代码正在设法破坏 response.data 中的 JSON,这就是它显示为字符串的原因。 所以现在的问题是为什么 JSON 损坏了
我通过降级到“webpack-dev-server”解决了这个问题:“3.1.10”
我有一个 devServer 代理,我猜这是 3.1.10 以上版本响应损坏的原因
@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 星的库竟然有这样一个基本的 bug 半年,真是太疯狂了 :confused:
不管 webpack-dev-server 问题如何,Axios 不应该默默地吞下 JSON.parse 异常,对吧?
完全有效
有关本机反应的此错误的任何更新!?
我发现当来自服务器的 json 响应无效时会发生这种情况,请使用像https://jsonlint.com/这样的 json 验证器来确保您的 json 格式正确
正在跟踪错误吞咽问题,我将关闭此问题,因为它本质上是它的重复。
如果您有任何问题,请与我们联系。
@fed135请链接相关问题(如果有),谢谢。
有人解决了这个问题吗?,我使用 laravel 作为我的 API,所以我在将它发送到我的应用程序之前记录了我的响应。 记录的响应是有效的 JSON,但接收到的响应末尾缺少最后一个“}”大括号,使其成为无效响应。 我不知道为什么我的移动应用程序会出现这种情况,因为前端应用程序也使用 axios,它工作正常,也尝试过邮递员,它工作正常。 任何想法或解决方案请?
当数据变得太大时会发生这种情况:(我没有任何问题,因为数据数组很小!
@matinzd我对我的数据进行分页,只返回 20
@matinzd还有,我的 fronend 应用程序使用相同的端点,但它没有遇到这种情况,只有具有 react native 的移动应用程序有时会
@fed135这是作为后续跟踪跟踪的正确问题吗? #61
请我的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'
同样的错误,谁能修复它:|
☝️我做了一个快速公关来解决这个问题。 希望它有帮助
使用 axios 0.19.2 在 react-native 中解决此问题
关于这个问题的任何更新?
我遇到了同样的问题,我解决了这个问题,请更改 axios 的方法,如果您有“GET”方法,则无法发送正文,因为您可以解决此问题,要解决此问题,您需要更改为“POST”,它会工作
最有用的评论
我发现当来自服务器的 json 响应无效时会发生这种情况,请使用像https://jsonlint.com/这样的 json 验证器来确保您的 json 格式正确