微信浏览器访问ajax接口十秒钟未响应自动重发
2018-12-21更新: 在url或者ajax带上 connect_redirect=1 这个参数,我在项目中遇到的会自动重发的手机确实不重发了,但是有人说有很小一部分的手机还是会重发 原文地址见:https://developers.weixin.qq.com/community/develop/doc/b8f9f09573e92ffb0e23308d54bcdcf7 评论区9楼
=================================================================== 以下为原文
在微信内资的浏览器中调用程序(ios暂未发现,android上面会出现),当网络不稳定或服务器处理慢,ajax调用服务器十秒钟未响应,微信的浏览器默认就会关闭上一次的请求,重新发起新请求。 在日常的查询处理中可能还好,但是涉及到订单等数据必须唯一的时候,就会出现下两次订单的情况,并且每次的间隔都是十秒钟(很少一部分会有9秒钟的情况) 所以我加了两个方式来处理 1.ajax超时
ajaxTimeoutTest=$.ajax({
url: "",
type: "post",
data: {
},
timeout : 8000, //超时时间设置,单位毫秒
datatype: "json",
success: function (msg) {
}
error: function (msg) {
},
complete : function(XMLHttpRequest,status){ //请求完成后最终执行参数
if(status=='timeout'){//超时,status还有success,error等值的情况
ajaxTimeoutTest.abort();
alert("网络请求超时,请检查网络后再试");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
在网络不好的时候要给用户提示而不是一直在等数据返回,并且主动切断ajax。 2.查询订单状态(以订单举例,最常见的一种) 即便不存在重发的情况下,在对订单进行操作的时候也是需要先判断订单的状态,如果已经支付成功应该就返回给前端支付成功不要重复支付的提醒。 但是之前做的一套系统里面,下单的时候没有生成订单而是在最终确认支付的时候才会生成订单(不知道为啥会这样设计,姑且这样用吧),这个时候可以用session(cookie)来判断。
if(session().getAttribute("orderSessios")!=null){
errorMsg = "请勿在一分钟内重复提交订单";
outJson(errorMsg);
return;
}else{
session().setAttribute("orderSessios", "orderSession");
session().setMaxInactiveInterval(60);//秒
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
代码仅供参考,请根据实际业务增加判断逻辑
编辑 (opens new window)
上次更新: 2024-11-06, 19:27:10