在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 add event remove event
Apr 07 Javascript
JSQL 批量图片切换的实现代码
May 05 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
Aug 23 Javascript
js 弹出框只弹一次(二次修改之后的)
Nov 26 Javascript
Js的Array数组对象详解
Feb 22 Javascript
js时间比较 js计算时间差的简单实现方法
Aug 26 Javascript
AngularJs Modules详解及示例代码
Sep 01 Javascript
JavaScript仿微博输入框效果(案例分析)
Dec 06 Javascript
jQuery html表格排序插件tablesorter使用方法详解
Feb 10 Javascript
Angular6使用forRoot() 注册单一实例服务问题
Aug 27 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
Sep 21 Javascript
javascript实现扫雷简易版
Aug 18 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
ajax缓存问题解决途径
2006/12/06 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
FF IE兼容性的修改小结
2009/09/02 Javascript
js 幻灯片的实现
2011/12/06 Javascript
javascript判断office版本示例
2014/04/11 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
2016/12/05 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
微信小程序如何自定义table组件
2019/06/29 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
python3+PyQt5重新实现自定义数据拖放处理
2018/04/19 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
Python lambda表达式用法实例分析
2018/12/25 Python
20行python代码实现人脸识别
2019/05/05 Python
500行python代码实现飞机大战
2020/04/24 Python
python基于opencv实现人脸识别
2021/01/04 Python
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
地理科学专业毕业生求职信
2013/10/15 职场文书
新闻记者个人求职的自我评价
2013/11/28 职场文书
埃及王子观后感
2015/06/16 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
六年级作文之关于梦
2019/10/22 职场文书
python爬虫之selenium库的安装及使用教程
2021/05/23 Python