当前位置: 首页 > 面试题库 >

IE8意外缓存AJAX结果

闻慎之
2023-03-14
问题内容

我对来自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。就像它已经缓存了结果一样。

如果我将呼叫更改为$.post("/game/getpuzzleinfo", ...IE,则接听就很好。但是随后Firefox退出了工作。

有人可以就为什么IE缓存我的$.getAjax调用对此有所了解吗?

更新

根据以下建议,我已将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。



 类似资料:
  • 问题内容: 我在Internet Explorer中的页面出现问题。我有一个Ajax调用,在其他浏览器中,当我单击该链接时,该调用会传递到控制器中并正确加载数据。但是在IE中,一次加载后,它消失了,而我却没有通过控制器就获得了相同的旧结果。 问题答案: 尝试: 放置在控制器类中的此属性禁用缓存。由于不需要在应用程序中缓存,因此将其放置在BaseController类中: 这是有关OutputCac

  • 问题内容: 好像我使用加载动态内容,结果缓存在浏览器中。 在QueryString中添加一些随机字符串似乎可以解决此问题(我使用),但这听起来像是一种hack。 还有其他方法可以做到这一点吗?或者,如果唯一字符串是实现此目标的唯一方法,则除之外还有其他建议吗? 问题答案: 我使用,这将避免冲突,除非您在同一毫秒内发生多个请求: 编辑: 这个答案已经好几年了。它仍然有效(因此我没有删除它),但是 现

  • 问题内容: 我现在有点泡菜。我正在构建一个将从CGI后端获取数据的网页。我无法控制CGI后端,也无法控制服务器(因此无法控制mod_headers或mod_expires)。同样,由于脚本的参数,我无法向每个请求附加唯一值(例如’&089u0af0d98)。使用XmlHttpRequest对象的请求是AJAX。我尝试设置“ If-Modified-Since”和“ Cache-Control”请求

  • 问题内容: 给定一个变量,该变量包含巴黎时区的日期时间2000-01-01 00:01(冬季afaik中为UTC + 2): 我希望转换为UTC会导致日期时间为1999-12-31 22:01,但是却得到了: 我想念什么? 谢谢 问题答案: 不幸的是 ,在许多时区使用标准构造函数的参数“不起作用” 。 但是对于没有夏令时转换的时区来说是安全的,例如UTC: 您会注意到: “ LMT + 0:09:

  • 我有以下代码: 为什么它会打印Java流?

  • 我有以下代码,它将标记字符串以创建对象列表: 我预期的输出是 1#、#Jon#、#176 2#、#Jack#、#200 3#、#Jimmy#、#160 如果我把内部分界线更改为类似的东西,它会正常工作为什么会发生这种行为?