我现在有点进退两难。我正在构建一个网页,将从CGI后端接收数据。我无法控制CGI后端或服务器(因此无法使用mod_headers或mod_expires)。另外,由于脚本参数的原因,我不能向每个请求附加唯一值(如“&089u0af0d98”)。请求使用XmlHttpRequest对象进行AJAX传输。我尝试设置“If-Modified-Since”和“Cache-Control”请求标头,但并未成功。是否有其他想法可以防止浏览器缓存AJAX响应?
我现在有点进退两难。我正在构建一个网页,将从CGI后端接收数据。我无法控制CGI后端或服务器(因此无法使用mod_headers或mod_expires)。另外,由于脚本参数的原因,我不能向每个请求附加唯一值(如“&089u0af0d98”)。请求使用XmlHttpRequest对象进行AJAX传输。我尝试设置“If-Modified-Since”和“Cache-Control”请求标头,但并未成功。是否有其他想法可以防止浏览器缓存AJAX响应?
如果需要,您可以使用POST方法发送随机参数,同时使用GET方法发送重要变量。
如果您在使用IE时遇到问题,发送POST请求可以停止缓存服务器响应。
我使用这个 JavaScript 函数(它又使用了 jQuery.ajax 函数),将 cache 参数设置为 false 就可以了。这对我来说完美地解决了问题,也许你可以试一试。
function ajax_call(urlString)
{
ret_val="";
$.ajax
(
{
type: "GET",
url: urlString,
async:false,
cache:false,
dataType: 'html',
success: function(msg)
{
ret_val=msg;
},
error:function (xhr, textStatus, thrownError)
{
ret_val=xhr.readyState;
alert("status=" +xhr.status);
}
}
);
return ret_val;
}
我在我的基础html页面(default.aspx)中使用了$.ajaxSetup({ cache: false });
,这个网站不是经常被访问的,它很好地工作了。再也没有令人头痛的缓存问题了。
<input type="hidden" name="ie_sucks" id="ie_sucks", value="1" />
然后,在通过AJAX提交表单的函数中,我使用以下代码将这个隐藏的输入设置为当前时间戳:
$('#ie_sucks').val(new Date().getTime());
document.getElementById('ie_sucks').value = new Date().getTime();
我知道jQuery的.ajax()
调用有一个名为“cache”的参数,如果设置为false,将强制浏览器不缓存请求的页面。 也许值得检查jQuery源代码,看看他们是如何做到的。
(我正在检查它,如果我找到任何东西,我会更新的,但提前发布这个答案,以防你或其他人有更好的运气找到它。)