我有一个页面通过Jquery AJAX调用从XML文件中获取内容。
问题是它会在刷新时为除IE之外的每个浏览器更新XML文件中的内容。
我试图用元标记来解决这个问题
<meta http-equiv="expires" content="-1"/>
<meta http-equiv="cache-control" content="no-cache,must-revalidate" />
<meta http-equiv="pragma" content="no-cache"/>
这是相关javascript的一小部分
$(document).ready(function(){
$.ajax({type: "GET",url: "file1.xml",dataType: "xml", success: parseXml });
}
function parseXml(xml){
document.getElementById(eventMonthName).innerHTML=firstxmlvari.getElementsByTagName('month')[0].childNodes[0].nodeValue;
}
任何建议都将非常感谢!
答案 0 :(得分:4)
你也可以使用“cache:false”选项,它的工作方式与Akos Lukacs提到的相同。结果是相同的,但您不必创建自己的日期。
$(document).ready(function() {
$.ajax({
type: "GET",
url: "/echo/xml/",
cache: false,
dataType: "xml",
success: parseXml
});
});
答案 1 :(得分:3)
是的,可能你遇到了IE的激进缓存...... 尝试设置HTTP标头,但对我有用的东西是将当前时间附加到查询字符串,如下所示:
$(document).ready(function() {
$.ajax({
type: "GET",
url: "/echo/xml/",
data: {
_rnd: new Date().getTime()
},
dataType: "xml",
success: parseXml
});
});
function parseXml(xml) {
alert(xml);
}
关于JSFIDDLE的示例:http://jsfiddle.net/WVBDc/,检查传出的HTTP请求。
答案 2 :(得分:3)
由于jQuery的.load方法没有提供关闭缓存的便捷方法,我在我的请求中添加了一个timestamp参数,在控制器级别被忽略:
$('#userDialog').load('/Users/Edit/' + someValue + '?timestamp=' + new Date().getTime(), function () {
...
});
或:
$('#userDialog').load('/Users/Create', { timestamp: new Date().getTime() }, function () {
...
});
这确实只需要IE,但仍然是版本10。
答案 3 :(得分:0)
谢谢,我有一个类似的问题(当然只在IE中),请求后没有刷新的下拉列表。添加时间戳可以结合使用;
$(document).trigger("ready");
在成功功能中,干杯!