XMLHttpRequest 同步请求获取原始 arraybuffer 问题 时间: 2022-01-01 19:57 分类: JAVA Web ####前言 有时候因为需要我们不得不使用`XMLHttpRequest`的同步请求,但是同步请求不能设置`responseType`为`arraybuffer`,否则会报错: > Failed to set the 'responseType' property on 'XMLHttpRequest': The response type cannot be changed for synchronous requests made from a document. 那么我们该如何接收`arraybuffer`呢? ####解决 查找资料不难发现,不设置`responseType`的同步请求默认返回的是`ascii`编码的`string`。 我们可以直接将`string`通过下面的方法转为`arraybuffer`吗: ``` Uint8Array.from(xhr.response, c => c.charCodeAt(0)); ``` 结论就是:如果你服务器端返回的本来就是`ascii`编码的数据,那么是没有问题的,如果是非`ascii`编码的数据,那么接收到的数据就不是原始数据。 所有`大于127`的字节将全部变成`253`。 那么就没有办法了吗?办法还是有的: 将`mime-type`中的`charset`设置成`x-user-defined`即可。 ``` xhr.overrideMimeType('text/plain; charset=x-user-defined'); ``` 然后再使用`Uint8Array.from(xhr.response, c => c.charCodeAt(0));`转换获取到的就是原始的字节数据了。 标签: 无