Internet Explorer在刷新时不会更新AJAX处理的内容?

时间:2011-12-23 19:38:56

标签: jquery internet-explorer-8 refresh

我有一个页面通过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;
}

任何建议都将非常感谢!

4 个答案:

答案 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");

在成功功能中,干杯!