突破 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 属性是参数的值。

参考:

目录
相关文章
|
移动开发 小程序 JavaScript
微信小程序学习实录7(H5嵌入小程序、获取微信收货地址、数组对象url传值、js获取url参数)
微信小程序学习实录7(H5嵌入小程序、获取微信收货地址、数组对象url传值、js获取url参数)
607 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
1405 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传中文,正确。
922 0
|
测试技术 C++
URL传值关键字被转义
  最近项目中用到了不少URL传值,普通的都没问题,昨天不经意间发现传值之前的值是“c++”,接收之后就变成“c”了。刚开始以为我的URL写错了,检查之后发现也没有问题,而且传不带+号的值也没有任何问题。
1278 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;/
1230 0
|
前端开发 JavaScript
前端JS截取url上的参数
文章介绍了两种前端JS获取URL参数的方法:手动截取封装和使用URLSearchParams。
395 0
|
开发框架 前端开发 .NET
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
279 0
|
Java
JAVA 获取 URL 指定参数的值
JAVA 获取 URL 指定参数的值
206 0
|
存储 JavaScript 前端开发
js原生方法,获取url上面所有参数,并返回一个对象
JavaScript函数`getUrlParameters`用于从URL中提取所有参数并返回一个键值对对象。它接收URL,分割查询字符串,解码参数对,并存储在对象中。重复参数键会被存储为数组。
|
JavaScript 前端开发 数据格式
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
913 0