我有這個JavaScript函數向外部PHP腳本提供AJAX請求,如果新檢查與舊檢查不同,我希望這會自動更新HTML <div>
。如果內容更改,自動刷新JS數組?
<script>
window.setInterval(function()
{
$(function()
{
$.ajax({
url: 'api.php', data: "", dataType: 'json', success: function(rows)
{
for (var i in rows)
{
var row = rows[i];
var id = row[0];
var vname = row[1];
var Password = row[2]
$('#output').append("<hr />").append("<b>id: </b>"+id+"<b> name: </b>"+vname+" <b>Password: </b>"+Password);
}
}
});
});
}, 5000);
</script>
目前這成功地返回,並與該數組中的內容更新DIV,問題是,因爲加入window.setInterval(function()
線,將服務器的連接,每5秒,並重複數據更新<div>
..當所有我想要的,它爲它呼應了新的數據(如果有紐約州)
這是我其他的PHP腳本:
$STD = new mysqli ("localhost", "root", "hidden", "ajaxrequests");
$array = array();
$Query = $STD->prepare ("SELECT * FROM ajaxdata");
$Query->execute();
$Query->bind_result($ID, $Name, $Password);
while ($Query->fetch())
{
$array[] = array ($ID, $Name, $Password);
}
echo json_encode($array);
爲什麼使用append而不是隻寫整個輸出?另外,如果你想使用JSON字符串本身並假設JSON字符串不是太大,也許你只是將最近的字符串存儲到一個變量中,將它與傳入的字符串進行比較,如果匹配,則不做任何事情。如果它們不匹配,則用新數據覆蓋整個DOM元素。 – 2013-03-07 20:46:31
@MikeBrant你能提供一個例子嗎? – user2146021 2013-03-07 20:49:06
@MikeBrant此外,它已建立,它已經每隔5秒發送請求並存儲響應。爲什麼不直接用每個請求來替換內容?無論如何(因爲瀏覽器緩存非常高效),比較返回的內容和當前內容將花費比簡單地更新DOM更長的時間。如果你的響應真的很大,那麼你可能想要在服務器端對它進行哈希處理,並只比較哈希瀏覽器端來檢查更新。 – 2013-03-07 20:52:15