记一次有关GET/POST请求的Debug经历
Bug描述: 电商网站, 产品列表页面,加入购物车按钮,当连续点击“加入购物车”按钮时,在MAC上的Safari上,只会有部分请求通过 Ajax 被发送出去,而在 Chrome/IE/Firefox 上是没有这个问题的(每点击一次就发送一次请求)。
分析: 首先怀疑是浏览器兼容的问题, 因为其他浏览器上都是没问题的, 但是这个功能是由 jQuery.ajax 实现的, 对于jQuery来说, 这么明显的缺陷是不会出现的, 所以这种可能排除;
既然不是兼容问题, 那么最有可能就是我的jQuery.ajax请求写的有问题, 代码如下:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 |
$.ajax({
url: 'http://www.mydomain.com/checkout/cart/ajaxAdd', data: {product: product, form_key: form_key, qty: qty}, complete: function (xhr, event) { var response = JSON.parse(xhr.responseText); if(response.status){ |
看起来没有显示声明 async: true, 添加上之后Bug没有改善
后来突然灵光一现, GET 是从服务端上获取数据, POST 是向服务端发送数据, 虽然 GET 请求也可以传参,但是 GET 本质上是为了获取数据,会不会是 Safari 上的 GET 比较特殊,当上一次请求未完成时会忽略后面相同的请求? 添加上 type: ‘POST’后, 刷新页面, 果然问题解决了。
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$.ajax({
type: 'POST', async: true, url: 'http://www.mydomain.com/checkout/cart/ajaxAdd', data: {product: product, form_key: form_key, qty: qty}, complete: function (xhr, event) { var response = JSON.parse(xhr.responseText); if(response.status){ |
有关 GET 和 POST 的区别网上说的很多了, 比如 GET 请求的参数是直接编码在 URL 里的, 而 POST 请求的参数经过编码后保存在报文主体里; GET 请求传输数据量大小有限而 POST 请求传输数据量无限, 等等, 以上都是各种浏览器或者客户端对 HTTP 协议中的 GET 和 POST 的实现, 其实都不是 GET 和 POST 的本质区别,HTTP 协议中规定的 GET 和 POST 的区别很简单, 就是 “GET 是从服务端上获取数据, POST 是向服务端发送数据”。
如果您觉得阅读本文对您有帮助,欢迎转载本文,但是转载文章之后必须在文章页面明显位置保留此段声明,否则保留追究法律责任的权利。
作 者:www.jpdou.top
原文链接:http://www.jpdou.top/an-experience-of-debug-about-get-and-post/
记一次有关GET/POST请求的Debug经历的更多相关文章
- 记一次 CORS 跨域请求出现 OPTIONS 请求的问题及解决方法
今天前后端在联调接口的时候,发生了跨域请求资源获取不到的问题. 首先说明下跨域问题的由来.引自HTTP 访问控制 的一段话: 当 Web 资源请求由其它域名或端口提供的资源时,会发起跨域 HTTP 请 ...
- 记一次线上SpringCloud-Feign请求服务超时异常排查
由于近期线上单量暴涨,第三方反馈部分工单业务存在查询处理失败现象,经排查是当前系统通过FeignClient调用下游系统出现部分超时失败(异常代码贴在下方). Caused by: feign.Ret ...
- 记一次vue 普通异步请求微信二进制二维码 乱码 问题解决然后渲染
后端压力大,前端分忧. /*用微信小程序token拿二维码*/ async fetchMINIQRcode({commit,state},params){ var instance = axios.c ...
- 记一次nginx -t非常慢的排障经历
在一次修改nginx配置时候,执行 case: #/usr/local/nginx/sbin/nginx -t 出现执行命令出现很久没返回结果,也没返回成功或是失败,就是一直卡住的状态,严重影响ngi ...
- PartyLocation的Post请求问题---debug
这里,遇到了一个debug: @Override public void setPrimaryPartyLocation(PartyLocation partyLocation) { if (!get ...
- 【Ansible】记一次技术博客害死人的经历——ansible模板变量注入探究
风和日丽,夏天的北京湿热并举,睁不开的眼睛里,横竖都看着是“吃人”. 带薪学习的日子不好过,要在几天内迅速掌握导师下发要求学习的技能,看着以前一起蹲IT坑的同事人来人往,用隔壁同性黄同学的话来说,就是 ...
- Eclipse设置断点无效、无法拦截请求进行Debug调试
场景: 在Eclipse中添加Debug断点,从后台页面中点击修改按钮提交数据,发现打断点的地方并没有拦截到请求,接下来对此情况的进行分析. 分析: * 如果页面是根据业务需求复制别的相似html页面 ...
- 记一次Linux服务器上查杀木马经历
开篇前言 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,Linux上的病毒.木马较少,二则由于宣称Linux是最安全的操作系统,导致很多人对Linux ...
- 记一次在StackOverFlow上问问题的经历
最近一直在做测试方面的事情,被测的一些功能需要连接到FTP服务器上.而我在做本地测试时为了方便,就使用java写了一个简单的ftp服务器,可以在命令行下直接启动运行. 当时在main函数里是这样写的. ...
随机推荐
- docker里安装ubuntu
使用 Ubuntu 官方镜像 Ubuntu 相关的镜像有很多,这里使用 -s 10 参数,只搜索那些被收藏 10 次以上的镜像 $ docker search -s 10 ubuntu NAME DE ...
- C#中索引器Indexer的学习使用
索引器 顾名思义,是用来索引的,那么C#中索引器是用来索引什么的呢 首先我们知道,C#中的数组是本身就可以索引的,那么C#中的类和结构呢,类和结构的实例是无法索引的,如果我们想让C#中类或者结构的实例 ...
- 1.8 收集的XSS Payload
收集的XSS Payload ,可以做成字典,到时候批量测试:--------------------------------------------------------------------- ...
- SDUT2140图结构练习——判断给定图是否存在合法拓扑序列
拓扑序列的判断方法为不存在有向环,代码实现的话有两种,一种是直接去判断是否存在环,较为难理解一些,另一种的话去判断结点入度,如果存在的入度为0的点大于一个,则该有向图肯定不存在一个确定的拓扑序列 #i ...
- SuperSocket使用自定义协议与服务端通信发送实例
AsyncTcpSession tcpSession = new AsyncTcpSession(); public Encoding encoding = Encoding.GetEncoding( ...
- gitlab 502解决方案
gitlab突然出现502 尝试gitlab-ctl restart.gitlab-ctl reconfigure 无效. 之后做法: #查看git日志 gitlab-ctl tail发现日志报错:端 ...
- SpringBoot第六篇:整合通用Mapper
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10876339.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 在以往的项 ...
- Java web错误汇总
环境: 电脑:win 10 IDE: Eclipse Java EE IDE for Web Developers. Version: Luna Service Release 2 (4.4.2) B ...
- Jmeter-线程时间
随手记录下自己在学习遇到的线程时间问题 1.线程数14个,要求每秒进入2个线程,这设置准备时长因为7秒 及准备时长 = 线程数/每秒需要进入的线程数量 如上列中:准备时间 = 1 ...
- @Transactional之Spring事务深入理解
Spring支持两种事务方式: 编程式事务:使用的是TransactionTemplate(或者org.springframework.transaction.PlatformTransac ...