为什么jQuery AJAX返回字符串[Object blob]而非blob对象?
问题根因
- 核心错误是调用
$.ajax时没有显式指定dataType: 'blob'参数。jQuery 3.3.1 版本默认会自动推断响应数据类型,在未明确声明返回blob的情况下,框架会尝试将响应转为文本格式,原生Blob对象在此过程中被强制调用toString()方法,最终得到长度为13的"[object Blob]"字符串。 - 原代码同时在
xhrFields和自定义xhr回调中重复设置了responseType,属于冗余配置,二者保留任意一个即可,无需重复声明。
修正后的可用代码
jQuery.ajax({ url: url, method: 'GET', dataType: 'blob', // 必须显式指定返回数据类型为blob cache: false, xhrFields: { responseType: 'blob' }, success: function(data) { // 此处data为正常的Blob对象 console.log(data instanceof Blob); // 输出true } });
补充说明
jQuery 3.0 及以上版本已经原生支持dataType: 'blob'配置,只要正确声明该参数,无需自定义重写xhr回调,也可以正常获取到Blob对象。
内容的提问来源于stack exchange,提问作者Vivian River
相关产品推荐
相关产品推荐

