1

私が行った調査から、私はAjaxを使用する必要があるかもしれないと思いますが、私はAjaxにあまり精通しておらず、自分の機能に対する正しい答えを見つけることができないようです。

私はデータベースを使用していません(おそらく私はそうすべきですが、短期間の修正を探しています)。PHPを使用してユーザーのデータを入力するcsvファイルを使用しています。

私のphpはcsvファイルをループしていて、コンテンツを含むテーブルを表示しています。Twitterユーザー名の1列だけです。

<php?    
echo "<table>\n";
$file = file("Twitter.csv");
$file = array_reverse($file);
foreach($file as $f){
$string=$f; 
$string=str_replace("\r\n","",$string);
    echo "<tr>\n";
            echo "<td><a href='http://twitter.com/".$string."' target='_blank'><img src='https://api.twitter.com/1/users/profile_image?screen_name=".$string."&size=bigger' border='0'></td>\n<td>\n<a href='https://twitter.com/".$string."' class='twitter-follow-button' data-show-count='false' data-lang='en' data-size='large'>Follow @".$string."</a><script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src='//platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document,'script','twitter-wjs');</script>";
    echo "</td>\n</tr>\n";
    }
echo "\n</table>";
?>

ユーザーがTwitterアプリケーションを承認し、ユーザー名を取得すると、フォローする他の名前がリストされているページにリダイレクトされます。ただし、csvファイルの行数が変更されたときにそのページを更新する必要があります。

行数を取得し、更新するように変更されているかどうかを確認するには、x秒ごとにスクリプトを実行できる必要があります。

ロジックは次のように単純だと思います。

$linecount = count(file('Twitter.csv'));
every x seconds{
    $checkcount = count(file('Twitter.csv'));
    if ($checkcount != $linecount){
     refresh page
    }
 }

私は論理が正しいように感じます-私はそのコードを機能させる方法を理解するのに十分な教育を受けていません。

ファイルが更新されない場合、ページは更新されませんが、ファイルが変更されるまで、コードはx秒ごとに実行されます。

4

1 に答える 1

2

解決策は、いくつかのステップで実行できます(テストされていません)。

  • PHPスクリプトは、の現在の値filemtime('Twitter.csv')をJavaScriptのブロックに書き込みます。
echo '<script>var currentTS = ', (int)filemtime('Twitter.csv'), ';</script>';
  • 次の変更時刻を返す小さなPHPスクリプトを作成しますTwitter.csv
echo json_encode(array('ts' => filemtime('Twitter.csv')));
  • いくつかの単純なjQueryを使用して、AJAXを介してタイムスタンプをフェッチするJavaScript関数を記述します。
function myFunction() {
    $.ajax({
      url: '/path/to/check_mod_time.php',
      timeout: 2000, // don't wait too long
      success: function(data) {
        if (currentTS < data.ts) {
            location.reload();
        }
    });
}
  • 次を使用して、X秒ごとに関数を呼び出しますsetInterval()
setInterval(myFunction, 5000) // run every 5 seconds
于 2012-09-28T14:46:55.320 に答える