在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 相关文章推荐
有关于JS辅助函数inherit()的问题
Apr 07 Javascript
jquery遍历checkbox介绍
Feb 21 Javascript
js特殊字符过滤的示例代码
Mar 05 Javascript
jQuery源码分析之jQuery中的循环技巧详解
Sep 06 Javascript
javascript中sort() 方法使用详解
Aug 30 Javascript
JS+CSS实现带小三角指引的滑动门效果
Sep 22 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
Oct 22 Javascript
js文本框输入内容智能提示效果
Dec 02 Javascript
Angular开发者指南之入门介绍
Mar 05 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
js cavans实现静态滚动弹幕
May 21 Javascript
springboot+VUE实现登录注册
May 27 Vue.js
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
关于PHP5 Session生命周期介绍
2010/03/02 PHP
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
深入理解Webpack 中路径的配置
2017/06/17 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
js实现一个简易计算器
2020/03/30 Javascript
JS实现提示框跟随鼠标移动
2019/08/27 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
python常用函数详解
2016/09/13 Python
Python基于回溯法子集树模板解决全排列问题示例
2017/09/07 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
Python猴子补丁知识点总结
2020/01/05 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
现场施工员岗位职责
2014/03/10 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js