1. 程式人生 > >POST方式匯出Excel

POST方式匯出Excel

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