突破 URL 传值限制

简介:

问题

window.location = url 方法 当传值url 太长时,服务器无法正常接收。

比如下面,当 rowsData 数据量过大时,服务器请求失败。

window.location='rest/files/excel/easyui-datagird?fileName=' + fileName + '&columns='+columns2+'&rowsData='+rowsData;

原因

使用浏览器发送 GET 请求会受浏览器 URL 长度的限制。而 window.location.href 就是 GET 请求。

下面数据是从网上找的,不一定准确,但也能了解个大概:

  • IE 浏览器对 URL 的最大限制为2083个字符
  • Firefox 浏览器 URL 的长度限制为65,536个字符
  • Safari URL 最大长度限制为 80,000个字符
  • Opera URL 最大长度限制为190,000个字符
  • Chrome URL 最大长度限制为8182个字符

解决办法

将URL地址缩减到浏览器和服务器都可接收的或者换成 POST 请求。

POST理论上是不限制传输数据的。

下面例子就是用一个隐藏的 Form 表单来传参进行文件的下载:

var exportUrl = 'rest/files/excel/easyui-datagird' var form=$("<form>");//定义一个form表单
form.attr("style","display:none");
form.attr("target","");
form.attr("method","post");
form.attr("action",exportUrl);
var input1=$("<input>");
input1.attr("type","hidden");
input1.attr("name","fileName");
input1.attr("value",fileName);
var input2=$("<input>");
input2.attr("type","hidden");
input2.attr("name","columns");
input2.attr("value",JSON.stringify(columns));
var input3=$("<input>");
input3.attr("type","hidden");
input3.attr("name","rowsData");
input3.attr("value",JSON.stringify(rows));
$("body").append(form);//将表单放置在页面中
form.append(input1);
form.append(input2);
form.append(input3);
form.submit().remove();;//表单提交并 

其中,input 就是用来传递参数的。input 的 name 属性是参数的名称, value 属性是参数的值。

参考:

目录
相关文章
|
10月前
|
移动开发 小程序 JavaScript
微信小程序学习实录7(H5嵌入小程序、获取微信收货地址、数组对象url传值、js获取url参数)
微信小程序学习实录7(H5嵌入小程序、获取微信收货地址、数组对象url传值、js获取url参数)
234 0
|
JSON JavaScript Java
(java gui) 和 (网页 js) 通过url传值(如json)时,注意问题
(java gui) 和 (网页 js)  通过url传值时,如果不涉及特殊字符可以不进行编码, 但是如果有特殊字符,比如中文,及符号 就要进行编码。 java 使用 java.net.URLEncoder.encode(str, "UTF-8");编码, java 使用java.net.URLDecoder.decode(str,"UTF-8");解码, js 使用decodeU
1309 0
|
前端开发 JavaScript 数据格式
JQuery ajax url传值与data传值的区别
url传中文,乱码,即便charset为 UTF-8, $.ajax({    type: "POST",    cache: false,    url: "/ProductTypeAndCat/AddType?typeName=" + typeName,    contentType: "application/x-www-form-urlencoded; charset=UTF-8",    datatype: "JSON",}); data传中文,正确。
773 0
|
测试技术 C++
URL传值关键字被转义
  最近项目中用到了不少URL传值,普通的都没问题,昨天不经意间发现传值之前的值是“c++”,接收之后就变成“c”了。刚开始以为我的URL写错了,检查之后发现也没有问题,而且传不带+号的值也没有任何问题。
1092 0
|
.NET 开发框架 C#
2个页面间不通过Session与url的传值方式。
下面是全部代码,已经编译通过。Chuandi(传递)是名字空间 WebForm1:&lt;%@ Page language="c#" Codebehind="WebForm1.aspx.cs" Inherits="chuandi.WebForm1" %&gt;&lt;HTML&gt; &lt;HEAD&gt;  &lt;title&gt;WebForm1&lt;/title&gt; &lt;/
1156 0
|
1月前
uView queryParams 对象转URL参数
uView queryParams 对象转URL参数
16 0
|
1月前
|
JavaScript
vue截取URL中的参数
vue截取URL中的参数
19 0
|
3月前
|
前端开发
[牛客网-前端大挑战QD2] 获取url参数
[牛客网-前端大挑战QD2] 获取url参数
22 0
|
3月前
BurpSuite8.2 -- 查找包含id参数的URL
BurpSuite8.2 -- 查找包含id参数的URL
21 1
|
3月前
|
分布式计算 DataWorks 关系型数据库
DataWorks数据源问题之参数“连接Url”如何解决
DataWorks数据源是指DataWorks中配置的用于数据集成的外部数据源;本合集将讲解如何在DataWorks中配置和管理数据源,以及处理数据源连接和集成过程中的问题。
34 5