在 Axios 中禁用 JSON 解析
Posted
技术标签:
【中文标题】在 Axios 中禁用 JSON 解析【英文标题】:Disable JSON parsing in Axios 【发布时间】:2017-04-22 03:18:46 【问题描述】:我有一个 react 应用程序,我希望用户能够在其中上传他可以查看的代码文件。
因此,自然也接受 .json 文件。现在要获取文件内容,我使用 axios 向服务器上的文件发出 get 请求。
这适用于除 JSON 文件之外的所有文件,这些文件会自动解析,因此不能作为字符串使用,而是作为 javascript 对象使用。用JSON.stringify
再次将它们变成一个字符串会删除所有换行符,所以我不能这样做。
有什么方法可以阻止 Axios 自动解析 JSON?
【问题讨论】:
您是否将responseType
设置为text
(默认为json
)?
@VedranJukic 我已经尝试过了,但没有改变。我想这是因为服务器设置的内容类型,但我想在客户端解决这个问题,而不是改变我的 api
感谢@VedranJukic - 这对我来说是缺失的部分。
【参考方案1】:
LuleBes 的回答对我不起作用。起作用的是:
transformResponse: (res) => return res; ,
如:
axios.get(url,
headers,
transformResponse: (res) =>
// Do your own parsing here if needed ie JSON.parse(res);
return res;
,
responseType: 'json'
).then(response =>
// response.data is an unparsed string
);
【讨论】:
response.data 是一个空对象有什么帮助?我想要文件内容,而不是空对象。我不明白你在这里做什么,看到你的转换函数获取数据并只返回一个空字符串。 ops,忘记在我的应用程序测试中更改它。现在答案应该反映了问题。 对我不起作用:我必须评论 //responseType: 'json',然后我会在 res 中获取文本,否则已经是 json。 这对我有用。简写为:transformResponse: res => res
【参考方案2】:
好的,我想通了。您可以通过在配置中传递 transformResponse
数组来禁用响应处理,然后使用该数组代替默认值。在那里,您只需提供一个空数组或需要应用于响应的函数数组,如下所示:
axios.get(URL, transformResponse: [])
.then(response => /*response.data is plain text*/);
【讨论】:
以上是关于在 Axios 中禁用 JSON 解析的主要内容,如果未能解决你的问题,请参考以下文章
在Python Flask中,Axios POST没有被正确解析。