[英]Updating PHP page from MySQL database using AJAX: Algorithm to calculate recently added data
我創建了一個PHP頁面,該頁面顯示MySQL表中的數據。 該表通過我編寫的python udp偵聽器自動將數據插入其中,並且bash腳本每20秒廣播一次數據。
每當將新結果插入數據庫時,我都想使用AJAX來顯示新結果,而用戶則無需刷新頁面。 我已經實現了一個ajax功能,該功能允許用戶在文本框中鍵入他們希望看到的結果數。 然后,我使用onkeyup="LOADXMLDoc()"
調用了AJAX函數。 (LOADXMLDoc()是處理所有AJAX的函數)
我提供的代碼沒有特定的語言,這只是一種傳達想法的方法。
這里的最終目的是要有一個PHP頁面來顯示來自MySQL數據庫的實時數據。 我遇到的困難是僅檢索最新數據所需的算法 。
Displaydata.php
包含用戶看到的頁面,文本框和查看數據的窗口。
訪問getdata.php
包含用於連接到數據庫並根據用戶規范查詢結果的代碼。
getRecentData.php
這是我需要提取最新數據的算法。
我需要該算法來:
為了掃描數據庫,我想出了3種方法:
在displaydata.php中循環function()調用
Do while BooleanVariable = True { <?php sleep(1); ?> LOADXMLDoc2(); //The LOADXMLDoc2() is just the same as the previous one but for this AJAX request, just an example name for now. }
我個人覺得這種方法很混亂,我認為它不會起作用。
調用該函數時,在GetRecentData.php中循環整個代碼
Do while BooleanVariable = True { sleep(1); //Execute the algorithm to fetch recent data. }
我發現這是一種更干凈的方法,但是如果該函數僅被調用一次,這種方法是否會繼續運行?
最后一種方法是使用javascript SetTimeout()函數
Do while BooleanVariable = True { SetTimeout(LOADXMLDoc2(), 1000) //Run function every second }
對我來說,這似乎是迄今為止最干凈的方法,但是我可以接受任何其他解決方案。
我首先創建一個名為$ currentHighest的變量,這很容易解釋,我希望該變量包含當前使用的最大id整數的值。 因為我希望能夠在兩個文件中使用它,所以將其存儲在$ _SESSION數組中。 我在displaydata.php文件中聲明了變量,並希望在getRecentData.php中訪問它。
我在每個頁面的頂部調用session_start()函數,並使用以下命令聲明變量: $_SESSION['currentHighest'] = mysql_query("SELECT MAX(id) FROM data");
然后,我嘗試使用以下方法在getRecentData.php文件中訪問它: $currentHighest = $_SESSION['currentHighest'];
作為測試,我然后使用: echo $currentHighest;
從理論上講,我應該認為這將打印出已使用的最大id的值,但目前沒有任何打印內容。 然后,這構成了算法的開始。
現在,我需要使用SELECT MAX(id) FROM data;
來計算新的記錄數SELECT MAX(id) FROM data;
再次,和$ currentHighest變量。 我當前的方法看起來像這樣:
var x = 0;
var NewMax = ("SELECT MAX(id) FROM data");
Do until newMAX(id) = currentHighest {
sleep(1000);
NewMax = NewMax - x
x += 1
}
因此,它遞歸地取一個遞增的“ x”,直到NewMax =當前ID。 然后,我需要某種方式來獲取已找到的記錄數,並運行另一個MySQL查詢以獲取新記錄並將其插入頁面。 插入頁面不是問題,我已經完成了一次。
我所描述的只是我如何實現此任務的最初想法。 我正在尋找一種方法,如果這看起來是實現目標的合理方法,我該如何完成? 或者,什么是實現目標的更好方法。 我不是在尋找特定的代碼,除非它有助於解釋,而是在尋找實現目標的理論。 我可以在網上找到代碼。 如果人們不贊成,可以在評論中留下原因,以便我改善問題寫作。 提前致謝。
如果您想查看任何特定的代碼,我都有:
如果要立即更新瀏覽器中的數據,最好使用websockets。 解析UDP結果並將這些結果發送到套接字,而不是查詢數據庫。 該庫是一個很好的起點-http: //socketo.me/
您可以運行將UDP數據包作為服務偵聽的PHP腳本。 (例如-在Ubuntu上使用UpStart)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.