2017-01-02 14 views
1

サーバー上のページファイルが変更されたときに、JavaScriptを使用してページを更新します。ファイルを変更したときにページを更新する

ファイルのファイル変更時刻を取得してjsonとして返すには、api.php(下記参照)を使用します。

api.phpからデータを取得するのは問題ありませんが、古い値とjavascriptの新しい値を比較し、その場合はどうすればページを更新できますか?ここで

は、私がこれまでにやっていることです:

var oldVar = 0; 

setInterval(function(){ 
$.getJSON('api.php', function(data) { 
    console.log(data); 

    var obj = data; 

    var filedate = obj.filedate; 



    if (oldVar != filedate) { 
      location.reload(); 
    }; 

    var oldVar = filedate; 


}); 
}, 1000); // 1 second 

は明らかにこれは、ページの更新毎秒になりますが、私はどのように進めるには考えています。

ここに私がデータを取得するために使用するPHPコードがあります。私はfilemtimeを使用してサーバー上のファイルの変更時刻を確認します。

<?php 

    $filename = "test.php"; 

    if (file_exists($filename)) { 
      $dateFile = date("s", filemtime($filename)); 
      $dateOfFile = array('filedate' => "$dateFile"); 

      echo json_encode($dateOfFile);  
    } 

?> 
+0

私は、クライアント側ではなくPHPでリダイレクトを処理することをお勧めします – RamRaider

+0

oldVarはallways 0であり、oldVarの新しい値ではないという問題はありますか? – Hokusai

+0

@hokusaiご返信いただきありがとうございます。それは問題ではありません。私が欲しいのは、ページに変更が加えられたときに、ページを更新するためのjavascriptです。 リフレッシュ時api.phpは、test.phpを変更するたびに変更されるjson値を返します。 JavaScriptを毎秒このページで確認したい。私はそれがリフレッシュを引き起こすことを望む変化を見るとき。 – Niels

答えて

1

はJavaScript

var interval = setInterval(function(){ 
    $.getJSON('api.php', function(data) { 
     if (getCookie('old_modification') != data.filedate) { 
      window.location.reload(); 
     }; 

     setCookie('old_modification', data.filedate); 
    }); 
}, 1000); 

function setCookie(name, value) { 
    var cookie_string = name + "=" + encodeURI(value); 
    document.cookie = cookie_string; 
} 

function getCookie(cookie_name) { 
    var results = document.cookie.match('(^|;) ?' + cookie_name + '=([^;]*)(;|$)'); 
    return results ? unescape(results[2]) : null; 
} 

if(getCookie('old_modification') === null) { 
    setCookie('old_modification', 0); 
} 

PHP

$filename = "test.php"; 

if (file_exists($filename)) { 
    echo json_encode(array(
     'filedate' => filemtime($filename) 
    )); 
} 

ページを毎回リロードしているので、oldVar値は常に0に設定され、それはかかりませんタイマーのAJAXから受け取ったデータでその値をチェックすると効果があります。

ここでは、古い値を保存して更新するためのストレージが必要です。私はその目的のためにクッキーを使うことを好みました。私は、ページ自体をリロードするのではなく、ページの特定の部分を更新する別のオプション以外のオプションはありません。

私はJavaScriptを使用してクッキーを取得し設定するためにthisリファレンスを使用しました。これは、私のものより簡単で簡単なので、要件に応じて変更されました。

date機能でs形式を使用する理由がわかりません。それはあなたが何秒で同じかもしれないので信頼できないファイルの修正時間から秒を得るだけです。たとえば、11時30分50秒にファイルを変更し、11時31分50秒にファイルを変更しても、ページを再読み込みすると有効になりません。また、非常にまれなシナリオです。たとえ、filemtimeを単独で使うことは、UNIXのタイムスタンプを返し、いつでも同じではないからです。

希望すると助かります!

+0

私はあなたのお尻からかなり多くを学んだ!どうもありがとうございました! – Niels

+1

私はその仲間についてうれしいです!どういたしまして! :) – Perumal

0

あなただけの時間の秒の部分を返すdate("s", ...)を使用している - つまり、今、それは私のタイムゾーンでは11時42分16秒なので、それは価値"16"を返します。あなたが望むのは、date()関数で得ることができるエポックからの総秒数ですが、整数を返すtime()でより簡単になります。

また、JSコードでは、変数をvarで再定義していますが、これを行わないでください。 :)

+0

time()とdate()の部分については、この場合は実際には関係ありません。意図したとおりに動作します。正確な秒でファイルを保存する私の可能性は非常にスリムです。 PHPの部分は問題ではありません。 また、どのように私はそれを台無しにすることができたのか分かりませんが、間違いを修正しました。 – Niels

関連する問題