已經提到過兩次了,但我仍然想強調它。你永遠不會希望客戶端能夠直接訪問數據庫。這是一個嚴重的安全風險。
現在來解決。首先,你會想建立一個PHP文件,你可以用ajax來請求。讓我們把這種check.php
,它會是這個樣子:
<?php
// include necessary files to enable connection to the database
$query = "SELECT number, name FROM members WHERE id=1";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$number = $row['number'];
// send correct content type header of json
header("Content-Type", "application/json");
// we create an array, and encode it to json
// then echo it out while killing the script
die(json_encode(array('numbers'=>$number)));
現在到JavaScript的。該解決方案與Kyle Humfeld類似,但不會使用setInterval
,因爲這是一種非常糟糕的做法。這背後的原因是因爲setInterval
不會關心你的ajax調用的狀態,如果它已經完成或沒有。因此,如果服務器出現問題,您可能會收到堆疊請求,但這並不好。
因此,爲了防止這種情況,我們改用success
-callback的AJAX方法的組合(.getJSON
本質上是.ajax
的簡寫)和setTimeout
創造的東西,就是所謂的polling:
$(function(){
// placeholder for request
var request = null;
// request function
var check = function() {
request = $.getJSON('check.php', function(data){
// this will log the numbers variable to the dev console
console.log(data.numbers);
// initiate a timeout so the same request is done again in 5 seconds
setTimeout(check, 5000);
});
});
// initiate the request loop
check();
// if you want to cancel the request, just do request.abort();
});
而且,有一個更先進的解決方案,使用comet server將數據從服務器推送到客戶端,但在挖掘彗星之前,您應該嘗試讓上述工作先完成。如果你想閱讀這個主題,我建議你看看APE。
你不想直接這樣做。您想使用jQuery向PHP腳本發出Ajax請求,然後發出數據庫請求。 JQuery Ajax文檔:http://api.jquery.com/jQuery.ajax/ – 2011-01-13 23:52:12