You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery与Axios请求非标准JSON的响应差异及适配方案

两者响应处理逻辑差异
  • jQuery $.ajax 配置dataType: "json"时,解析逻辑更宽松:如果标准JSON.parse解析失败,会自动降级为使用JS执行的方式解析内容,所以支持不带双引号的key、内联JS表达式(比如示例中的Date.UTC调用)这类不符合JSON规范但符合JS对象字面量规则的内容,直接返回可用的JS对象。
  • Axios的默认解析逻辑是严格的:仅当响应头的Content-Type为application/json时,才会调用标准JSON.parse解析响应内容。而JSON.parse不允许任何不符合JSON规范的写法,既不接受无引号的key,也不能执行JS函数表达式,所以不仅不会自动解析为对象,手动调用JSON.parse也会直接抛出错误。
实现Axios和jQuery同等效果的方案

因为你不需要修改后端微进程的输出,最简单的方案是模拟jQuery的宽松解析逻辑,使用new Function执行返回的字符串来得到JS对象,该方案仅适用于你完全信任响应内容的场景(内部服务输出无恶意代码)。

单请求处理示例

axios({
  method: 'post',
  url: dataURL,
  // Axios会自动序列化JS对象为JSON,无需手动调用JSON.stringify
  data: this.state.user,
  headers: {
    'Content-Type': 'application/json'
  }
}).then((res) => {
  // 自定义宽松解析逻辑
  const customParse = (rawStr) => new Function(`return ${rawStr}`)()
  const returnedData = customParse(res.data)
  // 后续和jQuery中一样处理returnedData即可
  console.log(returnedData)
})

全局统一处理(多场景复用)

如果有多个这类接口,可以配置Axios响应拦截器,全局自动处理这类非标准格式响应:

// 在Axios初始化位置添加拦截器
axios.interceptors.response.use((response) => {
  // 匹配你需要处理的非标准JSON接口的路径规则,避免影响其他标准接口
  if (response.config.url.startsWith('/your-custom-json-api/')) {
    try {
      // 优先尝试标准JSON解析,兼容后续可能的后端规范改造
      return JSON.parse(response.data)
    } catch (err) {
      // 解析失败则使用宽松逻辑
      return new Function(`return ${response.data}`)()
    }
  }
  return response
})

内容的提问来源于stack exchange,提问作者BlindToMLAgainstTheWorld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:24:04