看起来,如果我使用$.get()加载动态内容,结果会缓存在浏览器中。

在QueryString中添加一些随机字符串似乎解决了这个问题(我使用new Date(). tostring()),但这感觉像是一个黑客。

还有别的办法吗? 或者,如果唯一字符串是实现这一点的唯一方法,除了new Date()还有其他建议吗?


当前回答

正如@Athasach所说,根据jQuery文档,$. ajaxsetup ({cache:false})将不适用于GET和HEAD请求。

你最好从你的服务器发送回一个Cache-Control: no-cache头。它提供了更清晰的关注点分离。

当然,这对不属于项目的服务url不起作用。在这种情况下,您可以考虑从服务器代码代理第三方服务,而不是从客户端代码调用它。

其他回答

正如@Athasach所说,根据jQuery文档,$. ajaxsetup ({cache:false})将不适用于GET和HEAD请求。

你最好从你的服务器发送回一个Cache-Control: no-cache头。它提供了更清晰的关注点分离。

当然,这对不属于项目的服务url不起作用。在这种情况下,您可以考虑从服务器代码代理第三方服务,而不是从客户端代码调用它。

JQuery的$.get()将缓存结果。而不是

$.get("myurl", myCallback)

你应该使用$。Ajax,它将允许你关闭缓存:

$.ajax({url: "myurl", success: myCallback, cache: false});

将Math.random()追加到请求url

这里所有的答案都在请求的URL上留下一个足迹,这将显示在服务器的访问日志中。

我需要一个基于头的解决方案,没有副作用,我发现它可以通过设置在如何控制网页缓存中提到的头来实现,在所有浏览器?

结果是,至少在Chrome上是这样的:

. ajax({美元 url: url、 标题:{ 'Cache-Control': '无缓存,无存储,必须重新验证', “杂注”:“no - cache”, “到期”:“0” } });

用POST请求代替GET请求怎么样? (无论如何你应该……)