在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 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
Apr 07 Javascript
W3C Group的JavaScript1.8 新特性介绍
May 19 Javascript
完美解决AJAX跨域问题
Nov 01 Javascript
JQuery实现展开关闭层的方法
Feb 17 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
Nov 24 Javascript
Web纯前端“旭日图”实现元素周期表
Mar 10 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
Mar 01 Javascript
jQuery实现获取选中复选框的值实例详解
Jun 28 jQuery
vue form 表单提交后刷新页面的方法
Sep 04 Javascript
利用JS响应式修改vue实现页面的input值
Sep 02 Javascript
vue的项目如何打包上线
Apr 13 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
PHP 魔术变量和魔术函数详解
2015/02/25 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
php探针不显示内存解决方法
2019/09/17 PHP
javascript 验证日期的函数
2010/03/18 Javascript
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
jQuery 获取对象 定位子对象
2010/05/31 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
ES6正则表达式扩展笔记
2017/07/25 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
python解析xml模块封装代码
2014/02/07 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
利用scikitlearn画ROC曲线实例
2020/07/02 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
python time.strptime格式化实例详解
2021/02/03 Python
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
机关门卫制度
2014/02/01 职场文书
钳工实训报告总结
2014/11/04 职场文书
三年级学生评语大全
2014/12/26 职场文书
自荐信格式范文
2015/03/04 职场文书
2015年派出所工作总结
2015/04/24 职场文书
2015年医药代表工作总结
2015/04/25 职场文书