我对来自JQuery Ajax请求的Internet Explorer缓存结果存在严重问题。
我的网页上有标题,每次用户导航到新页面时标题都会更新。页面加载后,我就执行此操作
$.get("/game/getpuzzleinfo", null, function(data, status) { var content = "<h1>Wikipedia Maze</h1>"; content += "<p class='endtopic'>Looking for <span><a title='Opens the topic you are looking for in a separate tab or window' href='" + data.EndTopicUrl + "' target='_blank'>" + data.EndTopic + "<a/></span></p>"; content += "<p class='step'>Step <span>" + data.StepCount + "</span></p>"; content += "<p class='level'>Level <span>" + data.PuzzleLevel.toString() + "</span></p>"; content += "<p class='startover'><a href='/game/start/" + data.PuzzleId.toString() + "'>Start Over</a></p>"; $("#wikiheader").append(content); }, "json");
它只是将标头信息注入页面。您可以通过访问www.wikipediamaze.com进行检查,然后登录并开始创建新拼图。
在我测试过的每种浏览器(谷歌浏览器,Firefox,Safari,Internet Explorer)中, 除 IE 之外 ,它都很好用。 首次 在IE中注入Eveything效果很好,但此后甚至再也没有调用/game/getpuzzleinfo。就像它已经缓存了结果一样。
/game/getpuzzleinfo
如果我将呼叫更改为$.post("/game/getpuzzleinfo", ...IE,则接听就很好。但是随后Firefox退出了工作。
$.post("/game/getpuzzleinfo", ...
有人可以就为什么IE缓存我的$.getAjax调用对此有所了解吗?
$.get
更新
根据以下建议,我已将ajax请求更改为此,从而解决了我的问题:
$.ajax({ type: "GET", url: "/game/getpuzzleinfo", dataType: "json", cache: false, success: function(data) { ... } });
IE以其积极地缓存Ajax响应而臭名昭著。使用jQuery时,可以设置全局选项:
$.ajaxSetup({ cache: false });
这将导致jQuery向请求查询字符串添加随机值,从而防止IE缓存响应。
请注意,如果您要缓存的地方还有其他的Ajax调用,这也将对其禁用。在这种情况下,请切换为使用$ .ajax()方法,并为必要的请求显式启用该选项。
有关更多信息,请参见http://docs.jquery.com/Ajax/jQuery.ajaxSetup。