【问题标题】:Disable JSON parsing in Axios在 Axios 中禁用 JSON 解析
【发布时间】:2017-04-22 03:18:46
【问题描述】:

我有一个 react 应用程序,我希望用户能够在其中上传他可以查看的代码文件。

因此,自然也接受 .json 文件。现在要获取文件内容,我使用 axios 向服务器上的文件发出 get 请求。

这适用于除 JSON 文件之外的所有文件,这些文件会自动解析,因此不能作为字符串使用,而是作为 javascript 对象使用。用JSON.stringify 再次将它们变成一个字符串会删除所有换行符,所以我不能这样做。

有什么方法可以阻止 Axios 自动解析 JSON?

【问题讨论】:

  • 您是否将responseType 设置为text(默认为json)?
  • @VedranJukic 我已经尝试过了,但没有改变。我想这是因为服务器设置的内容类型,但我想在客户端解决这个问题,而不是改变我的 api
  • 感谢@VedranJukic - 这对我来说是缺失的部分。

标签: javascript json axios


【解决方案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*/});

【讨论】:

    猜你喜欢
    • 2020-03-07
    • 2020-08-05
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2012-08-11
    • 1970-01-01
    相关资源
    最近更新 更多