使用XMLHTTPRequest(ajax)在客户端和服务器之间传输数据已经流行了一段时间。 有时,我们希望浏览器从服务器(如ArrayBuffer或Blob)检索二进制数据,例如pdf,image和psd文件。 这篇文章将介绍如何使用XMLHTTPRequest和jQuery实现它
使用XMLHTTPRequest下载二进制文件
对于XMLHTTPRequest,只需将XHR实例的responseType设置为arraybuffer或blob即可。 例如
var xhr=new XMLHTTPRequest();
xhr.open("GET", url, true);
//设置response type
xhr.responseType = 'arraybuffer';
xhr.addEventListener('load',function(){
if (xhr.status === 200){
console.log(xhr.response) // ArrayBuffer
console.log(new Blob([xhr.response])) // Blob
}
})
xhr.send();
使用jQuery Ajax下载
$ .ajax不支持arraybuffer或blob作为其dataType。 因此我们需要编写一个beforeSend处理程序:
//ajax设置函数
$.ajaxSetup({
beforeSend:function(jqXHR,settings){
if (settings.dataType === 'binary'){
settings.xhr().responseType='arraybuffer';
settings.processData=false;
}
}
})
$.ajax({
url:url,
dataType:"binary",
success:function(data){
console.log(data); //ArrayBuffer
console.log(new Blob([data])) // Blob
}
})
有关responseType的更多信息,可以参考mdn文档
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType
网友评论