1

ページファイルが更新されているかどうかを10秒ごとに確認し、ページが更新されている場合はユーザーに警告する必要がある場合は、JavaScript、jQuery、または PHP でプラグインまたは関数を見つけようとしています。

前もって感謝します:)私が十分に明確でない場合は申し訳ありません。質問があればコメントしてください。

編集:つまり、クライアント側またはサーバー側のスクリプトを使用して、AJAX 要求をサーバーに送信し、ユーザーが開いている現在のページがサーバー上で変更されているかどうかを判断し、アラートを表示します。

4

1 に答える 1

7

http HEAD リクエストを 10 秒ごとにサーバーに送信できます。これにより、サーバーはコンテンツではなくヘッダーのみを送信します。次に、「Last-Modified」応答ヘッダーを確認できます。

jQuery 関数$.ajax();は、これとよく似た機能をサポートしています。ただし、http ヘッダーをチェックする代わりに、Last-ModifiedjQquery は http ヘッダーを使用してサーバーに要求を送信しますIf-Modified-Since。次に、サーバーが応答コード 304 Not Modified で応答するかどうかを確認します。

これは、jQuery 機能を説明した短い HTML + Javascript の例です。

<html>
  <head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
    <script type="text/javascript">
      var checkUrl="test.txt";
      var firstCheck = false;
      window.setInterval(checkForUpdate, 1000);

      function checkForUpdate() {
          $.ajax(checkUrl, {
              ifModified : true,
              type : 'HEAD', 

              success : function (response) {
                  if(firstCheck === false) {
                      firstCheck = true;
                      return;
                  }
                  $('#output').html('the site has been modified');
              }
          }); 
      }    
   </script> 
  </head>
  <body>
    <div id="output">Not Modified</div>
  </body>
</html>

ただし、上記の jquery の例はうまくいきませんでした - jQuery 1.8 と firefox.(Linux) + apache2 Web サーバーを使用しています。サーバーは 304 Not Modified で応答しますが、成功関数が呼び出されます。

したがって、上記の最初の提案を実装する別の実用的な例を追加します。ここに JavaScript の部分があります。

    var checkUrl="test.txt";
    window.setInterval("checkForUpdate()", 1000);
    var pageLoad = new Date().getTime();

    function checkForUpdate() {
        $.ajax(checkUrl, {
            type : 'HEAD',
            success : function (response, status, xhr) {
                if(firstCheck === false) {
                    firstCheck = true;
                    return;
                }
                // if the server omits the 'Last-Modified' header
                // the following line will return 0. meaning that
                // has not updated. you may refine this behaviour...
                var lastModified = new Date(xhr.getResponseHeader('Last-Modified'))
                    .getTime();
                if(lastModified > pageLoad) {
                    $('#output').html('the site has been modified');
                }
            }
        }); 
    }  
于 2012-12-22T20:04:09.273 に答える