window.open以post方式传递参数并返回下载表格

###问题描述

现需要将页面上的所有数据传递到后台整合后生成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到新窗口中

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值