It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center
                            
                        
                    
                
                                7年前关闭。
            
                    
我试图在JavaScript,jQuery甚至PHP中找到一个插件或函数,必要时每隔10秒检查一次页面文件是否已更新,并提醒用户该页面是否已更新。

提前致谢 :)
对不起,如果我不清楚。如有任何疑问,请发表评论。

编辑:换句话说,使用客户端或服务器端脚本,将AJAX请求发送到服务器,并确定服务器上是否已修改了用户打开的当前页面并显示警报。

最佳答案

您可以每10秒向服务器发送一次HTTP HEAD请求。这将使服务器仅发送标头而不发送内容。然后,您可以检查“上次修改时间”响应标头。

jQuery函数$.ajax();支持与此非常相似的功能。而是先检查Last-Modified http头,然后jQquery使用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');
                }
            }
        });
    }

09-10 09:18
查看更多