使用iframe进行传值时,如果采用URL的方式传递,则最大只能传递大约2k的数据,超过这个长度就会被截断了,那么是否可以采用post的方式传值呢?答案是可以的,我们可以采用js创建一个form表单,并将此form提交到iframe上,这样就能做到打破2k数据的限制。
?
<iframe id="frame1" name="frame1" src="" style="display:none"></iframe> <script> var tranVal = function(){ document.getElementById("frame1").style.display = "block"; var postForm = document.createElement("form"); postForm.method = "post"; postForm.action = "http://localhost:8080/test/getdata.jsp"; postForm.target = "frame1";//用来将数据提交到frame1上 var input = document.createElement("input"); input.type = "hidden"; input.name = "username";//这个是传值的名称,要记住 var strA = "1234567890"; //循环500000次后,保证字符串的大小大于2M for(var i=0;i<500000;i++) strA+= "1234567890"; input.value = strA; postForm.appendChild(input); document.body.appendChild(postForm); postForm.submit(); //用完之后,不要忘记删掉 postForm.removeChild(input); document.body.removeChild(postForm); } </script> <button onclick="tranVal()"> 传递值 </button>
?
还需要注意2个问题:?
1 tomcat下post不能超过2M的问题
这个需要将tomcat的配置文件server.xml修改一下:
?
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" maxPostSize="0"/>
?maxPostSize为0时,表示不用限制长度。
2 跨域的问题
跨域不影响iframe的post传值,发送方的tomcat无需更改,只是需要将接收方的tomcat的maxPostSize修改为0即可。