微信开发页面请求重发问题

本文介绍了在微信浏览器中,如果Ajax请求超过10秒未响应,会自动重发请求的问题。作者提出了一种解决方案:当第一条请求响应时存储起来,第二条请求到来时返回第一条的响应。为了区分重复请求,使用了唯一的token,存储在服务器的properties文件中。每日生成新的properties文件,按日期存储请求响应。
摘要由CSDN通过智能技术生成

偶然的一次因为项目再生产上出了问题发现的

对于微信浏览器(安卓版本)如果页面请求结束等待响应时间超过10S微信浏览器会认为没响应,并主动重发上条ajax请求。

对于这两条ajax请求,页面的处理是响应第二条响应,那么第一条响应去哪里呢?鬼知道,不过这里我要说的是我的解决方案:

针对这两条ajax的请求结束时,其实响应结果都会返回,只不过页面仅仅响应第二条结果,那么我们的做法应该是什么?

我的做法是当第一条响应回来的时候我将其存储起来,当第二条请求来临时,我们返回第一条的响应,这样响应的就是第一条结果。问题得到解决。

但是新的问题来了  我们应该如何判断这两次请求是同一条请求呢?这时我的做法是模仿防止表单重复提交的方式,

我会在请求页面设置一个隐藏属性,也就是token当然这个token要永远为唯一的,并且每次用户访问到这个页面的时候token的值都需要变化

如何定制token并不是这里要讲的,在此咱不说明,在我们使用ajax发起请求的时候我会将token一并传入后台,在后台首先校验token是否为唯一,

如果为唯一则说明是第一次请求,会按照正常的流程进行,并且储存token。

如果token的值不是唯一的,则说明该请求是重复发送,这时候我们需要去第一个token中将响应找回来,并响应给页面。

当然如果存储响应信息呢?我这里有几种方式可以存储:

1、将响应存储在服务器内存中,这种性能方面是最好的,但是数据容易丢失。

2、将响应存储在nosql中,这种是我最推崇的,数据安全方面,性能方面都很棒,但是由于我们的项目没有使用nosql,所以我没用使用该方式。(推荐)

3、将响应存储在文件中,由于我们项目使用的是webservice技术,所以我们存储在xml里面比较方便,除了xml我们还可以存储在json文件里,但是这里我选取的是properties文件,为什么选取它呢?因为他是以键值的形式存储的,我们将唯一的token进行处理之后生成唯一键,通过键来获得响应,这样的好处是响应文件会少,一个properties文件可以存储很多的响应,但是xml或者是json文件,一个文件仅可以存储一个响应,这就是我选取properties文件的原因。

4、将响应存储在数据库中,这种方式可行,但是效率最差,不推荐使用。

下面列一下代码:

生成properties文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值