1

我的 ASP.NET MVC4 Web 应用程序有问题:

我们的网络应用程序用于不同工业设备的值和参数的实时数据可视化。当一个典型的监控页面在客户端的浏览器中打开时,页面本身一开始是静态的。当文档完成加载后,此页面上数据点的当前值通过来自数据库的 ajax 调用加载。该调用返回为 viewmodel 提供数据的 JSON 数据,然后 Knockout.js 使用该数据更新 UI 元素。

在初始加载当前数据之后,对当前显示的任何数据点的任何即将发生的更改都会通过 WebSocket 协议从服务器传输到页面,然后放入视图模型中,替换旧值。新数据也会立即写入数据库,因此 ajax 调用将始终提供最新值。

到目前为止,在所有支持 HTML5 的浏览器中,一切都非常稳定和快速——除了 Internet Explorer 10。我想补充一点:当然 ;-)

问题详细:

  1. 当我打开带有一些数据点的特定页面时,它会加载该页面。使用 ajax 从数据库中正确获取当前值。然后,新值到达并使用上述机制正确显示。UI 中的值得到更新。

  2. 现在我切换到另一个页面,等待它完全加载,然后我回到第一页(我是否使用“返回”按钮或单击链接或输入 URL 都没有关系手动),页面不显示当前值,而是最初在第一步中通过 ajax 加载的值。

令人困惑的是:我验证了数据库确实包含最新的值而不是页面上显示的值,因此它们应该在返回第一页时加载初始 ajax 调用。恼人的事情是:它们确实会在 Firefox、Chrome 甚至 IE9 等中加载——但不会在 IE10 中加载。

IE10 中是否有一些新的缓存机制?我该如何解决这个问题?除此之外:据我所知,这里似乎正在进行某种 Ajax / JSON 缓存,有没有办法在我的 ASP.NET MVC4 项目或 IIS 中完全/全局禁止 HTML 和 JSON 缓存?

谢谢你的帮助!

4

1 回答 1

2

jQuery AJAX 方法允许您关闭缓存:

$.ajax({
  url: "test.html",
  data: 'foo',
  success: function(){
    alert('bar');
  },
  cache: false
});

如果这不能解决您可以使用查询字符串技巧:

$.ajax({
  url: "test.html"+'?ts=' + $.now(),
  ...
  cache: false
});

无论如何,cache: false都会成功的。如果不是,也许您使用的是旧的 jquery 版本,最好升级。

于 2013-11-06T14:17:04.023 回答