![](/img/trans.png)
[英]Automatically run a PHP script every X seconds without refreshing the page
[英]Reading from a MYSQL table every 5 seconds and dynamically displaying results on a PHP page without refreshing
我正在尋找使用PHP從mysql數據庫中的表中顯示數據的方法,但是,我希望數據能夠自動更新自身並每5秒檢索一次當前值。而不必刷新頁面。 這可能嗎? 也許使用JQuery / AJAX? 如果是這樣,請說明如何完成/將我指向可以找到此類信息的資源
謝謝
如果您使用window.setInterval()
和jQuery的.load()
,則應該能夠執行所需的操作。 PHP腳本應返回需要替換前一個HTML的HTML。
Javascript:
function refreshData()
{
// Load the content of "path/to/script.php" into an element with ID "#container".
$('#container').load('path/to/script.php');
}
// Execute every 5 seconds
window.setInterval(refreshData, 5000);
一個非常基本的例子:
function poll(){
$.ajax({
type: "GET",
url: "your/php/script/",
success: function(data){
// do something with data
}
});
};
setInterval(poll, 5000);
jQuery是一個不錯的選擇。 這是ajax的文檔。
您將要使用setInterval進行此調用
這樣的事情可能會讓您入門。
setIntervla(updateFromDb,5000);
function updateFromDb(){
$.ajax({
url: "getUpdates.php",
success: function(){
$(this).addClass("done");
}
});
};
您所描述的正是AJAX所使用的類型,AJAX允許向您的服務器發出異步請求。
為了學習,我建議使用類似Jquery的框架,並研究AJAX api。
基本上,您將需要一個PHP腳本來查詢數據庫並以所需的方式響應結果。 一個建議是對它們進行JSON編碼。
在客戶端上的JavaScript中,您將需要執行以下操作:
var poll = setInterval(function(){
$.ajax({
type:"GET",
url: "yourpage.php",
success: function(data){
//HANDLE DATA
// use JSON.parse(data); if your JSON encoding your data
}
});
},5000)
只需轉到jQuery的文檔:
http://api.jquery.com/category/ajax/
使用命令“ jQuery.get()”或更好的“ jQuery.getJson()”向服務器發出http請求。 使用JSON在服務器和客戶端之間獲得更好的通信。 從服務器端返回一個json字符串,並將其在客戶端上轉換為javascript對象。 (jQuery.getJson函數已經為您完成了此操作),因此您可以輕松訪問數據數組中的鍵和值。
只是一個例子:
使用PHP的服務器部分:
<?
$data = array('key'=>'value');
return json_encode($data, true);
客戶部分:
$.getJSON('myurl.php', function(data) {
// THIS ONE IS CALLED with your PHP data
alert(data.key);
});
$(function(){
window.setInterval(function(){
$.post("filename.php",{'field1':field1,'field2':field2,'field3':field3},function(data){
//callbackfunction(data)
})
},30000);//millisecs
});
並讓您的php文件執行所有SQL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.