POST方式匯出Excel
阿新 • • 發佈:2018-11-26
1.方法一:
一般情況下,我們通過ajax獲取資料都是採用get方式獲取,但如果ajax的請求url過長時,get方式由於瀏覽器對url長度不同會導致無法正常獲取資料,尤其是IE。
這時候,我們需要通過post請求的方式獲取資料,而如果我們需要通過post方式匯出Excel表格,則需要通過表單提交的方式匯出Excel。
function postExcelFile(params, url) { //params是post請求需要的引數,url是請求url地址 var form = document.createElement("form"); form.style.display = 'none'; form.action = url; form.method = "post"; document.body.appendChild(form); for(var key in params){ var input = document.createElement("input"); input.type = "hidden"; input.name = key; input.value = params[key]; form.appendChild(input); } form.submit(); form.remove(); } //點選匯出按鈕匯出excel表格 exportButton.onclick = function() { var params = {}; postExcelFile(params, "http://www.XXX_excel"); }
嘿嘿,完美解決問題!如果後端返回伺服器異常,則需要後臺配合修改了。
連結:https://blog.csdn.net/qq_33036599/article/details/80844430
2.方法二. 採用Post請求的方式提交引數並匯出excel
一般情況下,我們都是採用get請求的方式匯出excel。例如採用如下方式:
var exportUrl = '/xxx;';
window.open(exportUrl);
匯出excel所需的邏輯引數拼接到url上即可。
但是,如果我們需要提交大量的引數到後臺才能匯出excel, 亦或者我們提交的引數中有中文,get提交亂碼了,那麼就可能想使用post提交的方式來匯出excel。因為post提交支援更多的引數,從而能解決get提交對url長度的限制問題。
然而,一般的post提交表單,意味著主頁面也會一起重新整理,體驗較差。那麼,這裡將提供一個仿非同步post提交匯出excel的例項。
程式碼如下:
_export = { canExport:false, post:function(data,exportUrl) { _export.canExport = true; if ($('#exportIframe').length > 0) { $('#exportIframe').remove(); } $('body').append('<iframe id="exportIframe" width="0" height="0" src="'+domain+'/export"></iframe>'); $('#exportIframe').load(function() { if (_export.canExport) { var formData = '<form method="post" action='+exportUrl+' >'; for (var name in data) { formData = formData + '<input type="text" name="'+name+'" value="'+data[name]+'" />'; } formData = formData + '<input type="submit" id="submitExportForm"/>'; formData = formData + '</form>'; $(this).contents().find('body').append(formData); $(this).contents().find('#submitExportForm').click(); _export.canExport = false; } }); } }
呼叫方式:
_export.post(submitData,exportUrl);
注意,這裡的submitData是使用jquery構建key:value的form引數物件。傳入匯出方法後被解析還原成form表單資料。
程式碼的思路就是,利用隱藏的iframe內嵌模組,在iframe內部post表單提交匯出我們想要的資料,頁面翻轉也僅發生在iframe內部,
我們的主頁面並不會發生翻轉,從而達到仿非同步post匯出的效果。
參考連結:http://www.codedocs.net/coding/302.html