我在使用JQuery Ajax请求的Internet Explorer缓存结果时遇到了严重问题.
我的网页上有标题,每次用户导航到新页面时都会更新.页面加载后,我这样做
$.get("/game/getpuzzleinfo", null, function(data, status) { var content = "Wikipedia Maze
"; content += "Looking for " + data.EndTopic + "
"; content += "Step " + data.StepCount + "
"; content += "Level " + data.PuzzleLevel.toString() + "
"; content += ""; $("#wikiheader").append(content); }, "json");
它只是将页眉信息注入页面.您可以访问www.wikipediamaze.com查看,然后登录并开始新的拼图.
在每一个浏览器我测试过(谷歌Chrome,火狐,Safari,IE浏览器),它的伟大工程,除了在IE中.Eveything 第一次在IE中注入就好了,但在此之后它甚至从未打过电话/game/getpuzzleinfo
.这就像是缓存了结果或其他东西.
如果我改变对$.post("/game/getpuzzleinfo", ...
IE 的调用就可以了.但随后Firefox退出了工作.
有人可以就此解释为什么IE缓存我的$.get
ajax调用吗?
UPDATE
根据下面的建议,我已将我的ajax请求更改为此,这解决了我的问题:
$.ajax({ type: "GET", url: "/game/getpuzzleinfo", dataType: "json", cache: false, success: function(data) { ... } });
NickFitz.. 176
IE因其对Ajax响应的积极缓存而臭名昭着.当您使用jQuery时,您可以设置一个全局选项:
$.ajaxSetup({ cache: false });
这将导致jQuery向请求查询字符串添加随机值,从而阻止IE缓存响应.
请注意,如果您正在进行其他需要缓存的Ajax调用,那么这也会禁用它.在这种情况下,切换到使用$ .ajax()方法并为必要的请求显式启用该选项.
有关详细信息,请参阅http://docs.jquery.com/Ajax/jQuery.ajaxSetup.
IE因其对Ajax响应的积极缓存而臭名昭着.当您使用jQuery时,您可以设置一个全局选项:
$.ajaxSetup({ cache: false });
这将导致jQuery向请求查询字符串添加随机值,从而阻止IE缓存响应.
请注意,如果您正在进行其他需要缓存的Ajax调用,那么这也会禁用它.在这种情况下,切换到使用$ .ajax()方法并为必要的请求显式启用该选项.
有关详细信息,请参阅http://docs.jquery.com/Ajax/jQuery.ajaxSetup.
正如marr75所提到的,GET
是缓存的.
有几种方法可以解决这个问题.除了修改响应头之外,您还可以将随机生成的查询字符串变量附加到目标URL的末尾.这样,IE每次请求时都会认为它是一个不同的URL.
有多种方法可以做到这一点(例如使用Math.random()
,日期的变化等).
这是你可以做到的一种方式:
var oDate = new Date(); var sURL = "/game/getpuzzleinfo?randomSeed=" + oDate.getMilliseconds(); $.get(sURL, null, function(data, status) { // your work });