http HEAD リクエストを 10 秒ごとにサーバーに送信できます。これにより、サーバーはコンテンツではなくヘッダーのみを送信します。次に、「Last-Modified」応答ヘッダーを確認できます。
jQuery 関数$.ajax();
は、これとよく似た機能をサポートしています。ただし、http ヘッダーをチェックする代わりに、Last-Modified
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');
}
}
});
}