Mic*_*cah 135 asp.net ajax jquery internet-explorer
我在使用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");
Run Code Online (Sandbox Code Playgroud)
它只是将页眉信息注入页面.您可以访问www.wikipediamaze.com查看,然后登录并开始新的拼图.
在每一个浏览器我测试过(谷歌Chrome,火狐,Safari,IE浏览器),它的伟大工程,除了在IE中.Eveything 第一次在IE中注入就好了,但在此之后它甚至从未打过电话/game/getpuzzleinfo.这就像是缓存了结果或其他东西.
如果我改变对$.post("/game/getpuzzleinfo", ...IE 的调用就可以了.但随后Firefox退出了工作.
有人可以就此解释为什么IE缓存我的$.getajax调用吗?
UPDATE
根据下面的建议,我已将我的ajax请求更改为此,这解决了我的问题:
$.ajax({
type: "GET",
url: "/game/getpuzzleinfo",
dataType: "json",
cache: false,
success: function(data) { ... }
});
Run Code Online (Sandbox Code Playgroud)
Nic*_*itz 176
IE因其对Ajax响应的积极缓存而臭名昭着.当您使用jQuery时,您可以设置一个全局选项:
$.ajaxSetup({
cache: false
});
Run Code Online (Sandbox Code Playgroud)
这将导致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
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32506 次 |
| 最近记录: |