2012-09-28 19 views
1

從我所做的研究中,我想我可能不得不使用Ajax,但我並不真正熟悉它,而且我似乎無法爲我的函數找到正確的答案。刷新頁面只有當csv行數改變

我沒有使用數據庫(也許我應該但我正在尋找一個短期修復)。我正在使用用戶數據輸入到PHP的csv文件。

我的php正在循環播放csv文件並顯示一個包含內容的表格。它只是一列twitter用戶名。

<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,並且它是否已更改爲刷新。

我想象的邏輯是簡單的:

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

覺得這樣的邏輯是對的 - 我只是沒有足夠的教育弄清楚如何編寫代碼的工作。

如果文件沒有更新,頁面將不會刷新,但代碼仍會每x秒執行一次,直到文件發生更改。

+0

怎麼樣,如果你只是檢查文件修改的時間戳? filemtime()? – Miroslav

+0

這個問題仍然沒有答案 - 我怎麼能檢查時間戳或linecount每x秒刷新頁面,如果它不同? – Chris

+0

對不起,我在想時間戳可能更有效率;您可以使用標題刷新頁面('Location:/ URL');我會看看阿賈克斯的解決方案,雖然... – Miroslav

回答

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'))); 
  • 編寫的JavaScript函數獲取使用一些簡單的jQuery通過AJAX時間戳:
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(); 
     } 
    }); 
} 
  • 讓喲烏爾函數被調用使用setInterval()每X秒:
setInterval(myFunction, 5000) // run every 5 seconds 
+0

不錯,但是您可能想補充說您的解決方案需要使用jQuery。 – jeroen

+0

我喜歡這裏要做的事情 - 在這種情況下,我會怎樣稱呼這個功能?是.ajax()我的函數名? – Chris

+0

@Chris不,你的函數裏面會有一段代碼。 –