1

我有一个 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 上的浏览​​器需要大约两分半钟。

其他 问题来看,我认为缓存可能是一个问题。但是,我尝试parameters:"defeatcache=" + new Date().getTime()在 Ajax 调用$.ajaxSetup({ cache: false });之前插入 Ajax 调用;两者都不起作用。

有人对我如何让我的 Mac 浏览器更快地注意到断开的连接有任何建议吗?

4

3 回答 3

1

如评论和此处如何在 Safari 浏览器中禁用 Ajax 缓存中所述?,您需要将参数附加到 URL,我不确定这个位在做什么,parameters:"defeatcache="但我一直使用它的方式是在 url 上:

url = url + '&nocache=' + new Date().getTime();

要修改您的示例,checkURL应该在哪里未编辑纯 url

url:config.checkURL + '&nocache=' + new Date().getTime(),

如果上述方法仍然不起作用,您希望将无缓存标头添加到您尝试访问的 URL - 例如,如果您正在访问的 url 称为“status.php”,那么您可以尝试将无缓存标头添加到status.php 页面本身:

header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.

显然,上面的代码(对于 PHP)会根据您的服务器端语言而有所不同(取自此处其他服务器端语言的更多示例:einternals

于 2013-02-27T12:10:09.610 回答
0

我曾经在响应的标头中禁用缓存。因此,在提供响应的服务中,考虑设置各种字段以从调用结束时禁用缓存。对不起,我没有任何现成的例子!!希望这可以帮助。

于 2013-03-04T20:44:22.197 回答
0

当您进行 .ajax() 调用时,请使用选项cache: false

.ajax(
     {url: 'http://...',
     cache: false });

或者

在您的 ajax 调用之前使用ajaxSetup

 $.ajaxSetup({ cache: false });
于 2013-03-04T02:37:56.127 回答