在Mac上,AJAX调用显示缓存约2分钟

时间:2013-02-22 16:37:54

标签: ajax macos

我有一个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浏览器更快注意到已关闭的连接?

3 个答案:

答案 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)

我曾经在响应的标题中禁用了缓存。因此,在提供响应的服务中,请查看设置各种字段以禁用从该调用结束的缓存。对不起,我没有任何准备好的例子!希望这会有所帮助。