-
只如初见 初学数据Lv2
发表于2020-2-4 20:59
楼主
问题来源:华宇法院产品线。
问题描述:第三方系统页面中,嵌套访问BI报表(点击后打开新的浏览器标签页来展现),会根据页面上选择的不同参数,动态的传递不同的参数值给BI报表作为计算参数。因为可选择的参数选项很多,有些还是中文值,对参数值编码以后拼接出来的url长度很长,可能超过5000。而IE浏览器能够允许的get请求url长度大概只有2083,使用时部分参数值被浏览器自动截掉了,导致报表计算参数值不完整。
解决方案:把访问BI报表url从get请求方式改为使用post请求方式。比如可以使用form表单提交过长的参数值。
简单示例如下:
复制代码
post请求绕开url最大长度限制.zip
(1.12 KB, 下载次数: )
问题描述:第三方系统页面中,嵌套访问BI报表(点击后打开新的浏览器标签页来展现),会根据页面上选择的不同参数,动态的传递不同的参数值给BI报表作为计算参数。因为可选择的参数选项很多,有些还是中文值,对参数值编码以后拼接出来的url长度很长,可能超过5000。而IE浏览器能够允许的get请求url长度大概只有2083,使用时部分参数值被浏览器自动截掉了,导致报表计算参数值不完整。
解决方案:把访问BI报表url从get请求方式改为使用post请求方式。比如可以使用form表单提交过长的参数值。
简单示例如下:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>post请求绕开url最大长度限制</title>
- </head>
- <body>
- <script type="text/javascript">
- newShowReport();
- function newShowReport(){
- var postUrl = "http://localhost:8087/bi47/showreport.do?resid=EBI$12$D7KJ8SJZIOFT7FX7VS0CRTXIAM78W9UT$1$KL6Y90UMUQIKKUALBCBVXFFZF1LDS1TZ.rpttpl&calcnow=true&showparams=true&escape=true";//BI报表请求url
- var iframe = document.getElementById("newShowReport_iframe");
- if(!iframe){
- iframe = document.createElement("iframe");
- iframe.id = "newShowReport_iframe";
- iframe.scr= "about:blank";
- iframe.frameborder = "0";
- iframe.style.width = "0px";
- iframe.style.height = "0px";
-
- var form = document.createElement("form");
- form.id = "newShowReport_form";
- form.method = "post";
- form.target = "_blank";
- <!--
- target 属性规定在何处打开 action URL:
- _blank 在新窗口中打开。
- _self 默认。在相同的框架中打开。
- _parent 在父框架集中打开。
- _top 在整个窗口中打开。
- framename 在指定的框架中打开。
- -->
-
- document.body.appendChild(iframe);
- iframe.contentWindow.document.write("<body>" + form.outerHTML + "</body>");
- }
- var newShowReport_form = iframe.contentWindow.document.getElementById("newShowReport_form");
- //长度不确定的参数值,分别放在form表单的input标签里
- newShowReport_form.innerHTML = "<input type='text' name='@test1' value='" + escape("测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1") + "'/>";//对应报表计算参数名称@test1
- newShowReport_form.innerHTML += "<input type='text' name='@test2' value='" + escape("测试2") + "'/>";//对应报表计算参数名称@test2
- newShowReport_form.action = postUrl;
- newShowReport_form.submit();
- }
- </script>
- </body>
- </html>