原生js ajax下载excel,pdf,兼容ie8

 1 /**打印包装信息 */
 2             print:function (that, data, obj) {
 3                 var deliveryCode = data.deliveryCode
 4                 //原生ajax
 5                 var xhr = new XMLHttpRequest();
 6                 //post方式请求后台的路径
 7                 xhr.open('get', window.BAOSIGHT.API.DELIVERY.PRINT_INFO+'?deliveryCode='+deliveryCode,true);
 8                 //导出的Pdf是二进制数据类型,所以设置为arraybuffer
 9                 xhr.responseType = 'arraybuffer';
10                 //请求头(key,value),请求头可以设置多个key-value对
11                 xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
12                 xhr.setRequestHeader('Authorization', that.global.getLocalStorage("Authorization") );
13                 // var formData = new FormData();
14                 //     formData.append('deliveryCode',that.defaults.deliveryCode);
15                 //  console.log(formData)
16                 //返回成功,导出的Pdf文件
17                 xhr.onload = function () {
18                
19                  if (this.status == 200) {
20                   // new Blob 默认转换 blod,转arraybuffer需要增加 type
21                   var blob = new Blob([this.response],{type: "arraybuffer"});
22                 //   var fileName = 'lichun.pdf'
23                   if (window.navigator && window.navigator.msSaveBlob) {
24                    //兼容ie 下载 msSaveBlob 仅支持保存  msSaveOrOpenBlob 支持保存or代开
25                    window.navigator.msSaveBlob(blob, fileName);
26                   }else{
27                    var a = document.createElement('a');
28                    var url = window.URL.createObjectURL(blob);
29                    a.href = url;
30                    //设置文件名称
31                    a.download = '包装信息.pdf';
32                    a.click();
33                   }
34                  }
35                 };
36                 //请求的参数,json格式,后台要用json格式接收
37                 xhr.send();
38             },

2.下载.excel文件

 1 export:function (e) {
 2                 var that=e.data.context
 3                 var data = JSON.parse(JSON.stringify(form.val('search_form'))),
 4                 var url = window.BAOSIGHT.API.DELIVERY.EXPORT_ORDER;
 5                 var xhr = new XMLHttpRequest();
 6                    xhr.open( 'post' , url, true );    // 也可以使用POST方式,根据接口
 7                 xhr.responseType = "blob" ;  // 返回类型blob // 如果导出为.pdf responseType='arraybuffer'
 8                 xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
 9                 xhr.setRequestHeader('Authorization', that.global.getLocalStorage("Authorization") );
10                // 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑
11                xhr.onload = function () {
12                  // 请求完成
13                  if ( this .status === 200) {
14                    // 返回200
15                    var blob = this .response;
16                    var reader = new FileReader();
17                    reader.readAsDataURL(blob);  // 转换为base64,可以直接放入a表情href
18                    reader.onload = function (e) {
19                      // 转换完成,创建一个a标签用于下载
20                      var a = document.createElement( 'a' );
21                      a.download = '送货单.xlsx' ;
22                      a.href = e.target.result;
23                      $( "body" ).append(a);  // 修复firefox中无法触发click
24                      a.click();
25                      $(a).remove();
26                    }
27                  }
28                };
29                // 发送ajax请求
30                xhr.send(JSON.stringify(data))
31             },
欢迎转载,请注明出处
原文地址:https://www.cnblogs.com/time1997/p/14836195.html