我创建了一个显示MySQL表数据的PHP页面。这个表通过我编写的python udp监听器自动插入数据,以及每20秒广播一次数据的bash脚本。
我希望使用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整数的值。因为我希望能够在2个文件中使用它,所以我将它存储在$ _SESSION数组中。我在 displaydata.php 文件中声明了该变量,并希望在 getRecentData.php 中访问它。
我在每个页面的顶部调用session_start()函数,并使用以下代码声明变量:$_SESSION['currentHighest'] = mysql_query("SELECT MAX(id) FROM data");
然后我尝试使用以下方法在 getRecentData.php 文件中访问它:$currentHighest = $_SESSION['currentHighest'];
作为测试,我然后使用:echo $currentHighest;
理论上,我认为会打印出已经使用过的最大内存的值,但是目前还没有打印出任何内容。然后,这将形成算法的开始。
现在我需要再次使用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
}
所以这递归地取消了递增的&#34; x&#34;直到NewMax =当前ID。然后,我需要一些方法来获取已找到并运行另一个MySQL查询的记录数,以获取新记录并将其插入到页面中。插入页面不是问题,我已经做过一次了。
我所描述的只是我对如何完成这项任务的初步想法。我正在寻找,如果这似乎是实现我的目标的合理方式,我该如何完成它?或者,什么是实现目标的更好方法。我不是在寻找特定的代码,除非它有助于解释,而是如何实现目标的理论。我可以在网上找到代码。如果人们投票不好,你能否在评论中留下理由,那么我可以改进我的写作问题。提前谢谢。
如果您想查看我拥有的任何特定代码:
答案 0 :(得分:1)
如果您希望立即更新浏览器中的数据,最好使用websockets。而不是查询数据库,解析UDP结果并将结果发送到套接字。这个图书馆是一个很好的起点 - http://socketo.me/
您可以运行侦听UDP数据包作为服务的PHP脚本。 (例如 - 在Ubuntu上使用UpStart)。