记一次有关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函数里是这样写的. ...
随机推荐
- ObjectInputStream缓存数据
DataManager /** * 本地数据的存储 * @author Administrator * */ public class DataManager { private static fin ...
- [51nod1113]矩阵快速幂
解题关键:模板题,方便以后熟悉 #include<bits/stdc++.h> using namespace std; typedef long long ll; struct mat{ ...
- Entity Framework Code-First(9.2):DataAnnotations - TimeStamp Attribute
DataAnnotations - TimeStamp Attribute: TimeStamp attribute can be applied to only one byte array pro ...
- cc和gcc
cc就是一个链接文件连接到gcc中.只不过cc是unix中常用的编辑工具,而在linux中用的gcc.有一些在unix中写好的程序要放在linux中,所以要指定命令cc为gcc,其实一样.用where ...
- C# 外观模式
外观模式(Facade Pattern) 介绍 定义: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.使用外观模式时,创建了一个统一的类,用来 ...
- centos lamp 配置
# 1. 查看是否有httpd进程正在运行(下图是有的情况) ps -ef|grep httpd
- 【转】vs发布msi程序详解
源地址:http://wenku.baidu.com/link?url=MV1Mf7IukCZ0cab8AzXQoQ3MAXeUAHGz5b2IuUL4Kw-hCI90ZyBKXwKeQA3t3-SV ...
- 51nod1024(math+set)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1024 题意:中文题诶- 思路:要是能求出a^b的值来就好了. ...
- 树的直径+rmq+(伪)单调队列 -HDU4123
给定一棵n个点并且有边权的树,每个点的权值为该点能走的最远长度,并输入m个询问,每次询问最多有多少个编号连续的点,他们的最大最小点权差小于等于Q.N<=50000 M<=500 Q< ...
- 洛谷P1311 选择客栈
P1311 选择客栈 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一 ...