在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 相关文章推荐
doctype后如何获得body.clientHeight的方法
Jul 11 Javascript
JavaScript新窗口与子窗口传值详解
Feb 11 Javascript
js的延迟执行问题分析
Jun 23 Javascript
js判断输入字符串是否为空、空格、null的方法总结
Jun 14 Javascript
jQuery图片轮播实现并封装(一)
Dec 03 Javascript
jQuery is not defined 错误原因与解决方法小结
Mar 19 Javascript
vue父组件向子组件动态传值的两种方法
Nov 11 Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
Aug 12 Javascript
vue 根据选择条件显示指定参数的例子
Nov 09 Javascript
vue实现分页加载效果
Dec 24 Javascript
Angular+ionic实现折叠展开效果的示例代码
Jul 29 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实现快速排序的三种方法分享
2014/03/12 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
Yii2如何批量添加数据
2016/05/17 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
在vant 中使用cell组件 定义图标该图片和位置操作
2020/11/02 Javascript
wxPython 入门教程
2008/10/07 Python
粗略分析Python中的内存泄漏
2015/04/23 Python
Python素数检测实例分析
2015/06/15 Python
python将unicode转为str的方法
2017/06/21 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
浅谈python3中input输入的使用
2019/08/02 Python
Python PIL库图片灰化处理
2020/04/07 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
个人教师自我评价范文
2013/12/02 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
《影子》教学反思
2014/02/21 职场文书
贫困证明怎么写
2015/06/16 职场文书
2015党建工作简报
2015/07/21 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB