一、遇到的问题
最近在项目中遇到一个问题:由公司内网访问系统执行某一操作时,浏览器正确发送请求(服务端代码有打印日志),但使用公司外网执行形同操作,服务端未打印日志(请求并未到达服务端),浏览器却显示已发送请求,且返回了数据(但数据中的业务数据为空)。
初步判断应该是与外网有关,于是找到运维人员帮忙在服务器上抓包,结果发现外网的请求并未到达服务端,看来该问题应该是前端原因导致。
查看前端发起请求的代码,发现该请求是GET请求,查找资料后才知道:原来GET请求在有些浏览器中会缓存,再次请求时,浏览器不会发送请求,而是使用上次请求获取到的结果。
二、jQuery解决方案如下:
$.ajax({ url: '/outer/cert/extension/getLatestCertOperInfo', type: 'get', dataType: 'json', async: false, cache: false, success: function (data) { } });
将cache设置为false。它的工作原理是在GET请求参数中附加时间戳"_={timestamp}"
注:也曾看到通过随机数形式解决Ajax中的缓存问题的方案,但是这种解决方案并不是特别可靠。因为随机数也有相同的情况。