微信浏览器访问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

在网络不好的时候要给用户提示而不是一直在等数据返回,并且主动切断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

代码仅供参考,请根据实际业务增加判断逻辑

上次更新: 2024-11-06, 19:27:10
最近更新
01
java playwright爬虫
11-06
02
连接chrome调试
07-23
03
连接chrome调试
07-23
更多文章>