我有一个Ajax小部件,用于监视网页上连接的状态,并在无法再访问服务器时向用户发出警报。它适用于Windows 7,但在Mac OSX 10.5.8(Safari和Firefox)上都失败了。
关键代码在这里:
(function(e){
e.fn.checknet=function(config){
function checkConnection(config){
e.ajax({
url:config.checkURL,
cache:false,
success:function(){
window.checknet.conIsActive=true
},
error:function(){
window.checknet.conIsActive=false
},
complete:function(){
if(window.checknet.conIsActive){
connectionExtablished()
}
else{
connectionLost()
}
}
})
setTimeout(
function(){checkConnection(config)},
config.checkInterval
)
}
}
})(jQuery);
我每隔五秒就打电话一次。当我关闭服务器时,Windows浏览器确实会在五秒钟内注意到。但是,Mac上的浏览器需要大约两分半钟。
从other questions,我认为缓存可能是一个问题。但是,我尝试在Ajax调用之前将parameters:"defeatcache=" + new Date().getTime()
插入到Ajax调用和$.ajaxSetup({ cache: false });
;既不起作用。
是否有人建议我如何让我的Mac浏览器更快注意到已关闭的连接?
答案 0 :(得分:1)
正如评论中提到的那样How to disable Ajax caching in Safari browser?,您需要将参数附加到URL,我不确定这一点是做什么parameters:"defeatcache="
但是我一直使用它的方式是在网址上:
url = url + '&nocache=' + new Date().getTime();
要修改您的示例checkURL
是未经编辑的普通网址,应该是
url:config.checkURL + '&nocache=' + new Date().getTime(),
如果上述方法仍然不起作用,您希望将no-cache标头添加到您尝试访问的URL中 - 例如,如果您访问的网址名为“status.php”,那么您可以尝试添加no-cached status.php页面本身的标题:
header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
显然,上面的代码(对于PHP)会有所不同,具体取决于您的服务器端语言(取自其他服务器端语言的更多示例:einternals)
答案 1 :(得分:0)
当您进行.ajax()调用时,请使用 cache:false
选项.ajax(
{url: 'http://...',
cache: false });
或
在你的ajax调用之前使用 ajaxSetup
$.ajaxSetup({ cache: false });
答案 2 :(得分:0)
我曾经在响应的标题中禁用了缓存。因此,在提供响应的服务中,请查看设置各种字段以禁用从该调用结束的缓存。对不起,我没有任何准备好的例子!希望这会有所帮助。