关于嵌套访问BI报表在IE浏览器上请求过长的解决方案

1682
0

只如初见 初学数据Lv2

发表于2020-2-4 20:59

楼主
    问题来源:华宇法院产品线。
    问题描述:第三方系统页面中,嵌套访问BI报表(点击后打开新的浏览器标签页来展现),会根据页面上选择的不同参数,动态的传递不同的参数值给BI报表作为计算参数。因为可选择的参数选项很多,有些还是中文值,对参数值编码以后拼接出来的url长度很长,可能超过5000。而IE浏览器能够允许的get请求url长度大概只有2083,使用时部分参数值被浏览器自动截掉了,导致报表计算参数值不完整。
    解决方案:把访问BI报表url从get请求方式改为使用post请求方式。比如可以使用form表单提交过长的参数值。
    简单示例如下:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>post请求绕开url最大长度限制</title>
  6. </head>
  7. <body>
  8. <script type="text/javascript">
  9. newShowReport();

  10. function newShowReport(){
  11.     var postUrl = "http://localhost:8087/bi47/showreport.do?resid=EBI$12$D7KJ8SJZIOFT7FX7VS0CRTXIAM78W9UT$1$KL6Y90UMUQIKKUALBCBVXFFZF1LDS1TZ.rpttpl&calcnow=true&showparams=true&escape=true";//BI报表请求url
  12.     var iframe = document.getElementById("newShowReport_iframe");
  13.     if(!iframe){
  14.         iframe = document.createElement("iframe");
  15.         iframe.id = "newShowReport_iframe";
  16.         iframe.scr= "about:blank";
  17.         iframe.frameborder = "0";
  18.         iframe.style.width = "0px";
  19.         iframe.style.height = "0px";
  20.         
  21.         var form = document.createElement("form");
  22.         form.id = "newShowReport_form";
  23.         form.method = "post";
  24.         form.target = "_blank";
  25.                 <!--
  26.                 target 属性规定在何处打开 action URL:
  27.                         _blank 在新窗口中打开。
  28.                         _self 默认。在相同的框架中打开。
  29.                         _parent 在父框架集中打开。
  30.                         _top 在整个窗口中打开。
  31.                         framename 在指定的框架中打开。
  32.                 -->
  33.         
  34.         document.body.appendChild(iframe);
  35.         iframe.contentWindow.document.write("<body>" + form.outerHTML + "</body>");
  36.     }
  37.         var newShowReport_form = iframe.contentWindow.document.getElementById("newShowReport_form");
  38.         //长度不确定的参数值,分别放在form表单的input标签里
  39.     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
  40.     newShowReport_form.innerHTML += "<input type='text' name='@test2' value='" + escape("测试2") + "'/>";//对应报表计算参数名称@test2
  41.     newShowReport_form.action = postUrl;
  42.     newShowReport_form.submit();
  43. }
  44. </script>
  45. </body>
  46. </html>
复制代码


post请求绕开url最大长度限制.zip (1.12 KB, 下载次数: )

最近看过此主题的会员

lingzed

esen_523R6HRZW8

esen_50GYBQSQ0W

chenzyd

myyouping

国寿财刘宁

勇敢向前

zhyanwei

chenzy

yamaha

usery

0个回答

只看楼主

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号