Ajax基礎教程(4)- 實現基本Ajax技術 4.4 建立自動重新整理頁面

來源:互聯網
上載者:User

股票行情、天氣資料、標題新聞……這些都是經常改變的資料,但不值得為這些資料的修改手工地完全重新整理頁面。儘管CNN.com之類的網站確實會定期重新載入,但是,如果只是為了改變一兩個標題新聞和幾個圖就重繪整個頁面,這可能很讓人掃興。當然,如果重新整理整個頁面,可能很難發現到底哪些是新內容!

如果使用Ajax,使用者就不用反覆點擊refresh(重新整理)按鈕。技術新聞網站Digg (http://digg.com/spy)就使用了這種技術。Digg採用自動重新整理方法不斷更新其頁面,並使用了很有協助的褪色技術,以可視化的方式讓使用者知道哪些新聞是新的(見圖4-7)。

圖4-7 Digg.com,自動重新整理頁面的例子

如果查看Apple的新聞,你可能已經看到Steve Jobs在Apple的2005世界開發人員大會上的主題演講,其中透露Apple將開始轉向Intel處理器。MacRumors.com (http://www. macrumors. com/)的小組使用Ajax技術相當及時地發布了這個資訊,而且減輕了其伺服器的壓力。最近,Apple的iTunes網站(http:// www.apple.com/itunes/)正在使用Ajax動態更新其下載數(目標是5億)(見圖4-8)。

自動重新整理頁面實際上相當簡單。對於代碼清單4-7所示的例子,使用一個按鈕開始“輪詢”,不過在實際應用中,可能會以onload事件代之。doStart()方法負責啟動,不過最有意思的地方是pollCallback()方法中的setTimeout()方法,它允許以固定的時間間隔(單位是毫秒)執行給定的方法。createRow()方法只是一個充分利用了DOM方法來動態建立內容的輔助函數,refreshTime()用於重新整理定時器值。

代碼清單4-7 dynamicUpdate.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Ajax Dynamic Update</title>
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function doStart() {
createXMLHttpRequest();
var url = "DynamicUpdateServlet?task=reset";
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = startCallback;
xmlHttp.send(null);
}
function startCallback() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
setTimeout("pollServer()", 5000);
refreshTime();
}
}
}
function pollServer() {
createXMLHttpRequest();
var url = "DynamicUpdateServlet?task=foo";
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = pollCallback;
xmlHttp.send(null);
}
function refreshTime(){
var time_span = document.getElementById("time");
var time_val = time_span.innerHTML;
var int_val = parseInt(time_val);
var new_int_val = int_val - 1;
if (new_int_val > -1) {
setTimeout("refreshTime()", 1000);
time_span.innerHTML = new_int_val;
} else {
time_span.innerHTML = 5;
}
}
function pollCallback() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
var message =
xmlHttp.responseXML
.getElementsByTagName("message")[0].firstChild.data;
if (message != "done") {
var new_row = createRow(message);
var table = document.getElementById("dynamicUpdateArea");
var table_body =
table.getElementsByTagName("tbody").item(0);
var first_row =
table_body.getElementsByTagName("tr").item(1);
table_body.insertBefore(new_row, first_row);
setTimeout("pollServer()", 5000);
refreshTime();
}
}
}
}
function createRow(message) {
var row = document.createElement("tr");
var cell = document.createElement("td");
var cell_data = document.createTextNode(message);
cell.appendChild(cell_data);
row.appendChild(cell);
return row;
}
</script>
</head>
<body>
<h1>Ajax Dynamic Update Example</h1>
This page will automatically update itself:
<input type="button" value="Launch" id="go" onclick="doStart();"/>
<p>
Page will refresh in <span id="time">5</span> seconds.
<p>
<table id="dynamicUpdateArea" align="left">
<tbody>
<tr id="row0"><td></td></tr>
</tbody>
</table>
</body>
</html>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.