美文网首页
xhr.responseType 作用

xhr.responseType 作用

作者: 菜鸡前端 | 来源:发表于2021-09-03 16:41 被阅读0次

1. 下载文件后格式错误

ajax 下载文件成功后,打开提示格式损坏,源代码如下:

  axios({
    method: 'get',
    url: "/public/工作簿1.xlsx", // 静态资源地址
  }).then(res => {
    const href = document.querySelector('.href')
    let blob = new Blob([res.data], { type: 'application/octet-stream'})
    href.href = URL.createObjectURL(blob)
    href.download = "xxx.xlsx"
    href.click()
  })
image.png
将 responseType 设置为 blob 或者 arraybuffer 即可:
  axios({
    method: 'get',
    url: "/public/工作簿1.xlsx", // 静态资源地址
    responseType: 'blob'
  }).then(res => {
    const href = document.querySelector('.href')
    let blob = new Blob([res.data], { type: 'application/octet-stream'})
    href.href = URL.createObjectURL(blob)
    href.download = "xxx.xlsx"
    href.click()
  })
// 原生ajax的设置方法
var xhr = new XMLHttpRequest();
xhr.responseType = "text";

2. 原因探索

responseType 的作用用于告诉浏览器,如何解析服务端返回的数据,需要保证客户端所设置的 responseType,能够解析服务端返回的内容类型( content-type),否则会导致格式解析错误,先看 responseType 所支持的类型:

类型 说明
"" responseType 为空字符串时,采用默认类型 DOMString,与设置为 text 相同
"arraybuffer" response 是一个包含二进制数据的 JavaScript ArrayBuffer
"blob" response 是一个包含二进制数据的 Blob 对象
"document" response 是一个 HTML Document 或 XML XMLDocument,这取决于接收到的数据的 MIME 类型。
"json" response 是一个 JavaScript 对象。这个对象是通过将接收到的数据类型视为 JSON 解析得到的。
"text" response 是一个以 DOMString(UTF-16字符串) 对象表示的文本

当后台返回的数据是二进制数据流时,我们必须指定客户端也是以二进制流的方式去解析,否则无法获取到期望的结果。在上面的例子中,我们未设置 responseType,所以默认的解析方式为 DOMString,导致数据不一致。

相关文章

  • xhr.responseType 作用

    1. 下载文件后格式错误 ajax 下载文件成功后,打开提示格式损坏,源代码如下: 将 responseType ...

  • JS 文件流方式下载Excel 问题

    ajax请求中需要添加responseType 类型为blob例如: xhr.responseType = 'bl...

  • 作用与反作用

    “别在伤口上撒盐”这句话听着有些难过,但是,在伤口上撒盐未必也不是好事,相反,有消杀细菌的作用,凡事无绝对。

  • 作用与反作用

    今日,我心情很好。赞叹自己能够在这段时间尽早地发现自己的一些问题。 我最近一直在观察自己,为什么碰到大事就容易退缩...

  • 水在烹饪中的作用

    漂洗作用,浸润作用,分散作用,传热作用,溶解作用。

  • 作用

    作业

  • 作用

    如果我们没有完全活在当下,就不会完全沉浸在痛苦当中。这便是,我们逃离当下,会活在过去,我活在未来的憧憬中的原因。我...

  • 作用

    任何东西都有作用,尽管是特别没用的东西,也能起到作用。 就像空气,虽然我们看不见它,但是他它可以...

  • 作用

    大宝贝儿上学时候的作业本,没用上,存着了。现在要绘画,正好有空白页,那就画呗。 普通的本子因为承载的不同而变得有不...

  • 作用

    每个人说得都对,那就听自己的。批评自然有价值,但如果丝毫不反思也毫无作用。

网友评论

      本文标题:xhr.responseType 作用

      本文链接:https://www.haomeiwen.com/subject/ylccwltx.html