解决window.location.href参数太长
前言:一提到页面跳转,最常用的一般就是window.location.href,如果需要带参数,也许可以在后面用?拼上,但这样并不安全,而且有个更严重的问题,这样的拼接是有长度限制的,如果达到好几千个字符,比如传个base64???这时你会发现浏览器报错了,直接不能传参了。
需求:解决window.location.href参数过长的问题
思路:我们再想想别的解决方案,我们知道post请求是没有参数长度限制的,而且还是比较安全的。post请求的方式第一能想到的肯定是ajax,但是可惜的是ajax好像不能跳转,但是不要忘记还有一种也能设置成post请求的,那就是表单了。那么这样我们就可以试试创建一个隐藏的表单,通过提交表单的方式来跳转。
方案:
post('******.do',{"username":p1,"userId":p2,"userCode":p3,"imgUrl":imgUrl}); function post(url, params) { // 创建form元素 var temp_form = document.createElement("form"); // 设置form属性 temp_form .action = url; temp_form .target = "_self"; temp_form .method = "post"; temp_form .style.display = "none"; // 处理需要传递的参数 for (var x in params) { var opt = document.createElement("textarea"); opt.name = x; opt.value = params[x]; temp_form .appendChild(opt); } document.body.appendChild(temp_form); // 提交表单 temp_form .submit(); }
可以看到,这里相当于做了一个隐藏的一次性使用的表单,该表单的提交方式是post,这样就完美的解决了参数过长的问题。