【问题标题】:How to prevent .NET JSON feeds from being cached如何防止 .NET JSON 提要被缓存
【发布时间】:2011-06-09 18:37:07
【问题描述】:

我创建了一个简单的 .aspx 页面,它在数据库中查询一些实时数据,然后返回 Content-Type application/json; charset=utf-8 的 JSONP(或最后类似 JSONP)提要

这里是输出的格式,或多或少:

jsonp1307643489579([
  ["12345","Text Here","99999","More Text Here","True","False","7/31","1"...],
  ["12345","Text Here","99999","More Text There",...]
]

然后是一个 JQuery .getJSON 调用:

var url = "myURL.aspx?id=123&callBack=?";
$.getJSON(url, null, function(msg) { etc etc.

除以下内容外,一切正常。在我的开发环境和本地服务器上,每次都会有新的数据回来。但是在生产网络服务器上,数据顽固地缓存,直到我回收 IIS 应用程序池(!)

我尝试了一些没有成功的事情。

1/ cache: false in ajaxSetup 不起作用。

2/ 关闭 web.config 中的输出缓存。

2a/ 在 aspx 页面声明中的 OutputCache Location="None" 不会这样做。

3/ 向 .getJSON(url) 调用添加随机唯一查询字符串数据。看到我们如何为每个调用附加一个唯一的回调参数,我想这已经发生了。

知道为什么我的网络服务器会保留这些缓存的应用程序/JSON 文件吗?

编辑:我正在查看实际的 .aspx 提要,因为它们从 Web 服务器下来,并且它们被缓存在那里。所以据我了解,这是一个 Web 服务器缓存问题,不一定是 JQUERY 缓存问题。

【问题讨论】:

    标签: jquery .net json iis jsonp


    【解决方案1】:

    在您拨打任何getJSON 电话之前,请使用:

    jQuery.ajaxSetup({
       cache: false
    });
    

    昨天我与同样的问题争论了大约半个小时。我不确定为什么手动添加随机查询字符串不起作用,但这为我解决了这个问题。在我添加上面的常规设置之前,缓存命中是完全随机的。

    【讨论】:

    • 我试过这个,没有运气。我将对我的 OP 进行编辑,以指定我实际上是在记事本中直接查看 .aspx 提要,并且它们作为缓存版本来自服务器,无论是否涉及 JQUERY。也许我也应该将其重新标记为 IIS 问题。
    • 就像一个魅力,我的 AJAX 请求不再被缓存,我每次都会得到一个新的结果。如果它不起作用,只需在请求的末尾添加一个随机数(或时间戳),它将被视为唯一请求并且不会从缓存中获取。
    【解决方案2】:

    为了详细说明@Stefan 的答案,将缓存设置为 false 会告诉 jquery 附加一个随机查询字符串以使请求唯一。

    示例:myURL.aspx?id=123&callBack=&_=13245897565132154878

    【讨论】:

      【解决方案3】:

      事实证明,确实是 .ASPX 服务器页面缓存了数据。对于所有对客户端 AJAX 东西的关注,我忽略了显而易见的事情。

      因此,我在服务器端添加了一连串的预防措施(Response.ExpiresAbsolute 等),它完成了工作。

      【讨论】:

      • 回答您自己的问题是完全可以接受的。如果您找到自己的答案,其他人可以从您的发现中受益。如果您认为自己发现了通常难以找到或不在 SO 上的东西,甚至可以发布一个问题以便回答您自己的问题。
      • 您能详细解释一下吗?告诉我你做了“等等”的回复并没有真正的帮助
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 2013-02-09
      • 2012-10-07
      • 1970-01-01
      • 2011-12-18
      相关资源
      最近更新 更多