在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复制内容到剪贴板
Dec 12 Javascript
轻松实现javascript数据双向绑定
Nov 11 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
Oct 11 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
Apr 19 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
Feb 01 Javascript
vue2.0学习之axios的封装与vuex介绍
May 28 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
Apr 29 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
Sep 02 Javascript
简单谈谈javascript高级特性
Sep 04 Javascript
利用React高阶组件实现一个面包屑导航的示例
Aug 23 Javascript
快速解决element的autofocus失效问题
Sep 08 Javascript
Vue中父子组件的值传递与方法传递
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 批量删除 sql语句
2009/06/05 PHP
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
thinkphp中的多表关联查询的实例详解
2017/10/12 PHP
基于JQuery的cookie插件
2010/04/07 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
jquery foreach使用示例
2013/09/12 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
Angular获取手机验证码实现移动端登录注册功能
2017/05/17 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
理顺8个版本vue的区别(小结)
2018/09/17 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
vue实现短信验证码输入框
2020/04/17 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
django中的setting最佳配置小结
2017/11/21 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
python IDLE 背景以及字体大小的修改方法
2019/07/12 Python
python多进程重复加载的解决方式
2019/12/13 Python
关于多元线性回归分析——Python&SPSS
2020/02/24 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
eharmony澳大利亚:网上约会服务
2020/02/29 全球购物
责任心演讲稿
2014/05/14 职场文书
经营场所使用证明
2015/06/19 职场文书
Mysql文件存储图文详解
2021/06/01 MySQL
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技
SQL解决未能删除约束问题drop constraint
2022/05/30 SQL Server