在這之前嘗試了好幾種的方法都不行,主要是因爲參數拼不上URL所以導致不成功
var xhr = new XMLHttpRequest();
xhr.open('get', 'http://localhost:8080/user/export', true);
xhr.responseType = 'blob';
xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
xhr.onload = function () {
if (this.status == 200) {
var blob = this.response;
var a = document.createElement('a');
var url = window.URL.createObjectURL(blob);
a.href = url;
//設置文件名稱
a.download = '用戶信息.xls';
a.click();
}
}
xhr.send(JSON.stringify({
"type" : 1,
"startDate" : "2018-01-01",
"endDate" : "2018-12-31"
}));
}
其他幾個方案就不說了,同樣因爲其中一個參數傳的是對象導致URL拼接不成功
下面這個是我成功的案例
<button filter="main-sjcl" onclick="downloadFile()" class="btn btn-rounded btn-mint" style="float:left;">
<i class="pli-down-4"></i>
<span>導出</span>
</button>
function downloadFile() {//值班表導出
if ($("#downloadFile").val().length < 1) {
return layer.msg('請選擇導出日期範圍!');
};
if (onDutyVm.exportNameData == undefined) {
return layer.msg('請選擇導出部門!');
};
let currentUser = JSON.parse(sessionStorage.getItem('user'));
let timeRange = $("#downloadFile").val().split(" - ");
let url = ondutybase + '接口';
let $eleForm = $("<form method='get'></form>");
$eleForm.attr("action", url);
$eleForm.append("<input name='acounts' type='hidden' value='" + JSON.stringify(onDutyVm.exportNameData) + "'>");
$eleForm.append("<input name='dutyStartDate' type='hidden' value='" + timeRange[0] + "'>");
$eleForm.append("<input name='dutyEndDate' type='hidden' value='" + timeRange[1] + "'>");
$(document.body).append($eleForm);
//提交表單,實現下載
$eleForm.submit();
$eleForm.remove();
};
導出Excel文檔弄好幾天終於搞定了,如果只是傳單個參數那就非常的好弄,但是其中的
JSON.stringify(onDutyVm.exportNameData)
是一個這樣的東西
"["gylzwatch","wangchao","liangchangquan","songbin","chenyong","lijianrong","shenxuepeng","chenwenzhao","zengzhipeng","xiaojiake","tangyu"]"
所以拼接在URL上的時候成了這個樣
let url = ondutybase + '接口?acounts='+"[object]"
導致URL不能直接成爲下載的鏈接