在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 相关文章推荐
Jquery事件的连接使用示例
Jun 18 Javascript
JavaScript中把数字转换为字符串的程序代码
Jun 19 Javascript
JavaScript中的事件委托及好处
Jul 12 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
Dec 21 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
Apr 13 Javascript
AngularJS  ng-repeat遍历输出的用法
Jun 19 Javascript
JS自定义滚动条效果简单实现代码
Oct 27 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
Jul 12 jQuery
微信小程序登录对接Django后端实现JWT方式验证登录详解
Jul 29 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
Nov 08 Javascript
vue用elementui写form表单时,在label里添加空格操作
Aug 13 Javascript
Openlayers显示瓦片网格信息的方法
Sep 28 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
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
php检测图片主要颜色的方法
2015/07/01 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
2019/09/11 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
详解px单位html5响应式方案
2018/03/08 HTML / CSS
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
德国消费电子产品购物网站:Guter Kauf
2020/09/15 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
美德少年事迹材料
2014/01/23 职场文书
商场活动策划方案
2014/01/24 职场文书
少儿节目主持串词
2014/04/02 职场文书
初中生期末评语大全
2014/04/24 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
学校捐书活动总结
2015/05/08 职场文书
联欢会开场白
2015/06/01 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电