在Js页面通过POST传递参数跳转到新页面详解


Posted in Javascript onAugust 25, 2017

场景

最近在工作中遇到一个需求,有个页面 a.vm,对 ajax 请求的结果进行判断后,获取结果里面的数据传递给一个 URL(b.htm),跳转到新的页面 b.htm。

遇到的问题

因为一开始是 GET 请求,所以当传递的数据过大的时候,会报错 nginx 414 request-uri too long

客户端请求头缓冲区大小,如果请求头总长度大于小于128k,则使用此缓冲区

client_header_buffer_size 128k;

请求头总长度大于128k时使用 large_client_header_buffers 设置的缓存区

large_client_header_buffers 指令参数4为个数,128k为大小,默认是8k。申请4个128k。

large_client_header_buffers 4 128k;

当http 的URI太长或者request header过大时会报414 Request URI too large400 bad request错误

造成这样的原因

cookie中写入的值太大造成的,因为header中的其他参数的size一般比较固定,只有cookie可能被写入较大的数据

请求参数太长,比如发布一个文章正文,用urlencode后,使用get方式传到后台

本次的故障原因是由问题 2 引起的。即当请求头过大时,超过 large_client_header_buffer 时,nginx可能返回 Request URI too large (414) 或者 Bad-request(400) 错误。

当Request line的长度大于large_client_header_buffer的一个buffer(128k)时,nginx会返回"Request URI too large" (414)错误,对应上面的场景2。

请求头中最长的一行也要小于large_client_header_buffer,当不是Request line的最长行大于一个buffer(128k)时,会返回"Bad-request"(400)错误,对应上面的场景1。

临时解决办法

修改 nginx 参数

主要是调大以下参数值:

client_header_buffer_size 512k;
large_client_header_buffers 4 512k;

但是调大这个值会出现一个问题,当我的服务器腾挪数据量比较大的时候,可能又要修改这样不是一个办法,最终的解决办法就是由 GET 请求方式修改为 POST 请求方式

最终解决办法

使用 jquery.redirect.js 框架来处理这样的情况,主要使用到的函数是 $.redirect

代码如下:

$http({
    method: "POST",
    dataType: "json",
    contentType: 'application/json',
    url: url,
    data: data,
   }).success(function (data) {
    if (data.success) {
     crId = data.data;
     $scope.errMsg = "";
     var url = "/xx.htm?id=" + id;
     window.location.href = url
    } else {
     $scope.errMsg = data.message;
     $scope.isDisabled = false;
     $scope.errorCode = data.code;
     $scope.trv.physics = data.data;
     if(data.statusCode === -224){
      var vms = data.data;
      console.log("vms: " + vms);

      $.redirect('/b.htm', {'vms': vms.toString(), 'resource': trv.resource, 'errMsg': $scope.errMsg});
     }

    }
   }).error(function (data) {
    alert(data);
    $scope.isDisabled = false;
   });

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
动态加载外部javascript文件的函数代码分享
Jul 28 Javascript
JS中判断null、undefined与NaN的方法
Mar 26 Javascript
JQuery each()嵌套使用小结
Apr 18 Javascript
JavaScript的jQuery库中ready方法的学习教程
Aug 14 Javascript
JS简单编号生成器实现方法(附demo源码下载)
Apr 05 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
Jun 16 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
Oct 25 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
Jan 18 Javascript
js实现3d悬浮效果
Feb 16 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
Jan 10 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
Jun 29 Javascript
node.js微信小程序配置消息推送的实现
Feb 13 Javascript
Vue上传组件vue Simple Uploader的用法示例
Aug 25 #Javascript
DVA框架统一处理所有页面的loading状态
Aug 25 #Javascript
基于JavaScript实现评论框展开和隐藏功能
Aug 25 #Javascript
js求数组中全部数字可拼接出的最大整数示例代码
Aug 25 #Javascript
Vue.js进行查询操作的实例详解
Aug 25 #Javascript
Vue实例中生命周期created和mounted的区别详解
Aug 25 #Javascript
Vue.js框架路由使用方法实例详解
Aug 25 #Javascript
You might like
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
PHP开发规范手册之PHP代码规范详解
2011/01/13 PHP
浅析php创建者模式
2014/11/25 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
javascript新手语法小结
2008/06/15 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
JavaScript内核之基本概念
2011/10/21 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
使用JSLint提高JS代码质量方法分享
2013/12/16 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
简单谈谈原生js的math对象
2017/06/27 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
python 函数传参之传值还是传引用的分析
2017/09/07 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
用Python进行websocket接口测试
2020/10/16 Python
Python实现微信表情包炸群功能
2021/01/28 Python
日本小田急百货官网:Odakyu
2018/07/19 全球购物
化工机械应届生求职信
2013/11/04 职场文书
外企求职信范文分享
2013/12/31 职场文书
庆中秋节主题活动方案
2014/02/03 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
妇产科护理心得体会
2016/01/22 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript
总结Java对象被序列化的两种方法
2021/06/30 Java/Android