2013-10-21 52 views
0

我想在我的CI視圖中使用JavaScript每2秒更新一次數據模型(不刷新),對於我的用例,其中數據庫內容可以由其他用戶。Codeigniter:從視圖調用模型 - 數據庫內容似乎凍結

<script type="text/javascript"> 
    var refreshFunc = setInterval(function() { 
    <?php 
    $this -> load -> model('m_cube', '', TRUE); 
    $stamp = $this -> $m_cube -> stamp(); 
    ?> 
    var stamp = "<?php echo $stamp; ?>"; 
    console.log(stamp);    
    }, 2000); 
    refreshFunc; 
    </script> 

我使用JS setInterval創建2秒的循環,並調用CI模型從PostgreSQL數據庫中檢索數據。在簡化的代碼示例中,它只是向數據庫請求一個時間戳。問題是寫入控制檯的時間戳不會更新 - 有些事情是卡住的。

2013-10-21 14:35:54.168-04 
2013-10-21 14:35:54.168-04 
2013-10-21 14:35:54.168-04 
... 

查詢真實數據表時的行爲相同 - 它不返回最新值。

爲什麼模型訪問數據庫的「凍結」版本?

回答

2

它沒有被卡住或「凍結」,這是你對之前和之後會發生什麼的一些混淆。

我沒有看到你使用AJAX,所以當你的PHP已經被處理(即數據從數據庫中獲取並分配給$ stamp)頁面 - HTML,CSS和JavaScript - 還沒有由服務器生成並提供服務,也不由瀏覽器輸出。

這意味着在您的setInterval中,您始終具有相同的值,該值已經生成,因此您不斷重新打印相同的字符串。

如果你想繼續更新,你需要不斷向服務器請求數據,這就是AJAX(異步JavaScript和XML)可以很方便的地方,因爲它作爲一個單獨的請求運行,所以你可以在兩個不同的「級別」上工作並獲取內容,而頁面的其餘部分保持靜態(已經提供並輸出)。

如果您使用的是jQuery,您可以查看$.ajax(),這使得這種事情變得非常簡單。

+0

啊是的。時間來刷我的阿賈克斯 –

0

當此腳本在服務器上運行時,它將獲取模型數據並將<?php ?>標記替換爲結果。因此,當涉及到客戶端瀏覽器時,它不會每2秒鐘聯繫服務器,但每2秒記錄一次值stamp。如果你希望它被更新,你應該考慮使用Ajax技術。