在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 option删除代码集合
Nov 12 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
Apr 16 Javascript
JavaScript模拟实现键盘打字效果
Jun 29 Javascript
javascript中的正则表达式使用详解
Aug 30 Javascript
jquery按回车键实现表单提交的简单实例
May 25 Javascript
深入理解Ajax的get和post请求
Jun 02 Javascript
Three.js基础部分学习
Jan 08 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
Feb 15 Javascript
js 获取今天以及过去日期
Apr 11 Javascript
利用node.js爬取指定排名网站的JS引用库详解
Jul 25 Javascript
js设置随机切换背景图片的简单实例
Nov 12 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
May 30 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的ajax框架xajax入门与试用介绍
2010/12/19 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
php数组去重复数据示例
2014/02/25 PHP
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
PHP反射学习入门示例
2019/06/14 PHP
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
值得分享的Bootstrap Table使用教程
2016/11/23 Javascript
微信小程序自定义组件
2017/08/16 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
Python文件与文件夹常见基本操作总结
2016/09/19 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
Python中捕获键盘的方式详解
2019/03/28 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
安装PyInstaller失败问题解决
2019/12/14 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
2021/02/07 Python
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
酒店实习个人鉴定
2013/12/07 职场文书
个人工作总结范文2014
2014/11/07 职场文书
海洋天堂观后感
2015/06/05 职场文书
提档介绍信范文
2015/10/22 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书