###问题描述
现需要将页面上的所有数据传递到后台整合后生成Excel表格。由于数据量较大,受到get方式后url的长度限制,无法实现该功能。
###解决方案
<form name="frm_edit" method="post" action="{PATH}downBatchExcel">
...
</form>
<script type="text/javascript">
function doSubmit(){
var ord_list_seq_strs;
if(( ord_list_seq_strs = tj_serialize_input('[name^="ord_list_seq["]')) === false) return false;
var ord_ifo =
'<div name="postDataForm">' +
'<input type="hidden" name="encode_ord_list_seq_strs" value="' + ord_list_seq_strs + '" />'+
'</div>';
//动态创建一个表单frm_edit,将要传递的数据,填充到这个表单中
jQuery('[name=frm_edit]').append(ord_ifo);
jQuery('.table-01').find('input,select').attr('disabled','disabled');
//用window.open()来创建一个空的页面
var newwin=window.open('about:blank','newWindow','width=1,height=1');
//目的:把frm_edit表单插入到这个空页面中
document.frm_edit.target = 'newWindow';//关键,form的target设置成和open的name参数一样的值
//自动提交表单,跳转到指定页面
document.frm_edit.submit();
//后台php处理后返回的是excel表格下载,之前建的空页面在弹出下载框后,未自动关闭。(原先用window.open()的get方式,弹出下载框后,原窗口会自动关闭)
setTimeout(function(){newwin.close(); }, 2000);
}
</script>
//这两个好像不需要加
var newwin=window.open('about:blank','newWindow','width=1,height=1');
document.frm_edit.target = 'newWindow';
//以下亦可
var post_arrs = {
'encode_download_order_numbers':download_order_numbers
,'encode_download_usr_ids':download_usr_ids
};
var downloadForm = document.createElement('form');
downloadForm.action = "/downloadBatch";
downloadForm.method = 'post';
downloadForm.target = '_blank';
for(var key in post_arrs){
var tempInput = document.createElement('input');
tempInput.type = "hidden";
tempInput.name = key;
tempInput.value = post_arrs[key];
downloadForm.appendChild(tempInput);
}
document.body.appendChild(downloadForm);
downloadForm.submit();
知识点
1.get与post的区别:
get提交的数据最大是2k(原则上url长度无限制,那么get提交的数据也没有限制咯?限制实际上取决于浏览器,(大多数)浏览器通常都会限制url长度在2K个字节,即使(大多数)服务器最多处理64K大小的url。也没有卵用。)。
post理论上没有限制。实际上IIS4中最大量为80KB,IIS5中为100KB。
具体参考:https://blog.csdn.net/qq_26360877/article/details/70665820
2.window.open()如何以post方式传递参数:
将form的target设置成和open的name参数一样的值,通过浏览器自动识别实现了将内容post到新窗口中