2012-05-14 56 views
0

所以,我在這裏有點困惑。Javascript沒有反映文件的變化

我正在慢慢地進入ajax或HTML5 SSE,因爲我有一個列表,從長遠來看,我希望在用戶不必刷新的情況下進行更新。但是,在這裏的寶貝步驟,我從一個簡單的函數開始,它應該告訴我列表正在從這裏讀取的文件已經改變,從另一臺計算機插入一個條目。

CODE:

<script type='text/javascript'> 
function CheckForChange(){ 
    alert("<?echo (count($listArray)) . ' and ' . count(file($filename_noformat))?>"); 
} 

setInterval("CheckForChange()", 7000); 
</script> 

listArray是PHP變量保持看到在頁面上時,頁面刷新,閱讀從文本文件中一行行的列表(我正在移動到一個數據庫,後來) 由於PHP變量只能在加載頁面時執行,所以PHP只會反映執行PHP時文本文件中的內容。

但是,使用Javascript和setInterval函數,它不應該能夠執行PHP來檢查函數執行時(每7秒)文本文件中的內容嗎?因爲它不是,我不明白爲什麼不。

我嘗試在4帖子到我的手機上的列表堵塞和手機的警報變爲4和4,但計算機仍然說3和3我想它說3和4

謝謝

+0

不要將字符串傳遞給'setTimeout',它們很慢,很難調試,並且不能很好地與範圍一起播放。傳遞函數。有[在manaual]中的例子(https://developer.mozilla.org/en/DOM/window.setTimeout)。 – Quentin

回答

2

setInterval()在您的頁面執行本地JavaScript,而不是基於服務器的PHP。如果您希望它在不重新加載頁面的情況下將內容發送到服務器,則必須使用ajax調用才能將某些內容實際發送到服務器,這可能會導致某些PHP執行。

提示 - 在瀏覽器中查看View/Source並查看頁面中的實際內容。頁面中沒有PHP。當頁面被創建時,PHP在服務器上運行一次。

1

  1. 的PHP在服務器上運行並輸出一些文本。
  2. 服務器將該文本發送給客戶端(瀏覽器)。
  3. 然後瀏覽器將該文本解釋爲HTML和JavaScript。

PHP只運行一次。它生成的JavaScript函數然後重複運行,但是從JavaScript的角度來看,該函數具有字符串字面值,而不是可執行的服務器端代碼。

如果你想運行PHP,那麼你必須向服務器發出一個新的HTTP請求。這需要重新加載頁面或使用Ajax。