1

Web ページ上の接続のステータスを監視し、サーバーに到達できなくなったときにユーザーに警告する 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);

5秒ごとに呼び出しています。サーバーをシャットダウンすると、Windows ブラウザーは実際に 5 秒以内に通知します。ただし、私の Mac のブラウザは約 2 分半かかります。

他の 質問から、キャッシングが問題になる可能性があることがわかりました。parameters:"defeatcache=" + new Date().getTime()ただし、 Ajax 呼び出しと Ajax 呼び出しの$.ajaxSetup({ cache: false });前に挿入しようとしました。どちらも機能しません。

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 にキャッシュなしのヘッダーを追加する必要があります。 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

.ajax()呼び出しを行うときは、オプションcacheを使用します:false

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

また

ajax呼び出しの前にajaxSetupを使用してください

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

以前は、応答のヘッダーでキャッシュを無効にしていました。そのため、応答を提供するサービスで、さまざまなフィールドを設定して、呼び出しのその側からのキャッシュを無効にすることを検討してください。申し訳ありませんが、準備が整った例がありません!! お役に立てれば。

于 2013-03-04T20:44:22.197 に答える