我有一个奇怪的问题,我一直在寻找解决方案一段时间没有结果。我正在开发一个网站,决定通过AJAX动态加载每个子页面(内容)(每个子页面还有.js和.css文件)。现在,当我正在处理它并更改某些文件的脚本/ css并刷新页面时,它不会加载它们。这就像AJAX记得以前的版本一样,因为当我把它全部翻过来并在几个小时后回来它会改变(!)。这个的任何想法?我想避免通过站点内存(或任何东西)记住任何东西,所以我可以正常工作。我不使用jquery,我使用纯js和我自己的函数进行ajax连接,也许我应该添加一些东西?这是:
function sendQuery( data )
{
var http = new XMLHttpRequest();
var url = data["url"];
var params = "";
var query = data["params"];
for(var key in query)
params+=key+"="+query[key]+"&";
params=params.substring(0,params.length-1);
http.open("POST", url, true);
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
http.send(params);
http.onreadystatechange = function()
{
if(http.readyState == 4 && http.status == 200)
{
data["result"](http.responseText);
}
}
}
答案 0 :(得分:0)
不完全确定你的意思,但这听起来像是一个缓存问题,为什么不将当前时间或类似的随机字符串附加到请求作为单独的参数?这种唯一性级别应该阻止浏览器缓存请求响应。
e.g。 '?nocache='+new Date().getTime()
您可能还希望通过设置适当的标头(例如)来阻止服务器端响应缓存调用返回的内容:
response.setHeader( "Pragma", "no-cache" );
response.setHeader( "Cache-Control", "no-cache" );
response.setDateHeader( "Expires", 0 );
答案 1 :(得分:0)
这似乎与您的缓存政策密切相关。
如果您使用apache托管网站,
检查根目录中的.htaccess,您可能会看到如下内容:
# Set up 2 Hour caching on commonly updated files
<FilesMatch "\.(xml|txt|html|js|css)$">
ExpiresDefault A7200
Header append Cache-Control "proxy-revalidate"
</FilesMatch>
上述设置设置到期时间为7200秒= 2小时。
要在开发中禁用缓存:
# Force no caching for dynamic files
<FilesMatch "\.(xml|txt|html|js|css)$">
ExpiresActive Off
Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</FilesMatch>
然后它应该正常工作。
另一种方法是改变这一行:
var url = data["url"];
要:
var url = data["url"]+"&ts="+(new Date().valueOf());
避免缓存。注意:它只是伪代码。 “?”如果没有,应该处理。
希望有所帮助:)