我在使用Internet Explorer浏览器时遇到了问题。我有一个ajax调用,它会调用一个表单,在其他浏览器中,当我点击链接时,它会经过控制器并正确加载数据。但是在IE中,当它被加载一次后,它总是带给我相同的旧结果,而不经过控制器。
我在使用Internet Explorer浏览器时遇到了问题。我有一个ajax调用,它会调用一个表单,在其他浏览器中,当我点击链接时,它会经过控制器并正确加载数据。但是在IE中,当它被加载一次后,它总是带给我相同的旧结果,而不经过控制器。
尝试:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
这个属性放在控制器类中,用于禁用缓存。由于我不需要缓存,在我的BaseController类中设置了它:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public abstract class BaseController : Controller
{
关于OutputCacheAttribute,这里有一个很好的描述:使用输出缓存提高性能
你也可以将它放在操作上。
您可以尝试将cache
选项设置为false
:
$.ajax({
url: '/controller/action',
type: 'GET',
cache: false,
success: function(result) {
}
});
这个选项将强制浏览器不缓存请求。
更新:
根据评论,您可以在URL中添加唯一的时间戳以避免缓存问题:
var d = new Date();
var myURL = 'http://myserver/controller/action?d=' +
d.getDate() +
d.getHours() +
d.getMinutes() +
d.getMilliseconds();
HttpMethod =“POST”
。var ajaxOpts = new AjaxOptions { UpdateTargetId = "TargetDiv", HttpMethod = "POST"};
像这样的实例;
@Ajax.ActionLink("Text","ActionName", new AjaxOptions { UpdateTargetId = "TargetDiv", HttpMethod = "POST"})
AllowCache
参数设置为false
:
@Ajax.ActionLink("AjaxCall", "AjaxMethod", "DeconflictedFiles",
new { },
new AjaxOptions
{
AllowCache = false,
})
而且IE不会缓存调用的结果。
我曾经写过关于如何修复jQuery和MS客户端库的IE缓存问题的博客:
http://yoavniran.wordpress.com/2010/04/27/ie-caching-ajax-results-how-to-fix/
希望这有所帮助!我在类似(但不完全相同)的问题上也发现这非常有用。
基本上要确保您在请求中使用POST而不是GET。这样做似乎可以防止IE缓存。
例如:
@Ajax.ActionLink("清除联系人", MVC.Home.ClearContacts(), new AjaxOptions{HttpMethod = "POST", UpdateTargetId="targetDiv"})
实际上,在IE浏览器中,缓存不会自动清除。 但在Chrome中,脚本可以正常工作。因此,您需要尝试在浏览器级别清除数据。