[Ajax] 實作 Gmail 的載入訊息

五月 2nd, 2006

進入 Gmail、Calendar 等 Google 的服務,時常會看到右上角有個紅底白字的「載入中...」,拿來當第一個 Ajax 的練習。
基本作法就是利用一個 DIV 區塊,預設為不顯示,等到呼叫 JavaScript 建立 XMLHttpRequest 時,將 DIV 區塊設為顯示,最後等伺服器後端傳回訊息時再隱藏區塊即可。這個範例是使用者輸入訊息,由 PHP 處理並顛倒字串印出。
Demo
網頁部分:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
<title>Ajax Test</title>
<script type="text/javascript">
var ajax;

function createHttpRequest() {
    if (window.ActiveXObject) {
        try {
            return new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                return new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e2) {
                return null;
            }
        }
    } else if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else {
        return null;
    }
}

function ajaxSendRequest(url) {
	var msg = document.getElementById('msg').value;
    document.getElementById('loading').style.display = "block";
    ajax = createHttpRequest();
    ajax.onreadystatechange = showResult;
    ajax.open("GET", url + '?message=' + msg);
    ajax.send("");
}

function showResult() {
    if (ajax.readyState == 4 && ajax.status == 200) {
        document.getElementById('loading').style.display = "none";
		document.getElementById('echo_msg').innerHTML = ajax.responseText;
    }
}
</script>
<style type="text/css">
#loading {
	position: absolute;
	width: 50px;
	height: 20px;
	line-height: 20px;
	top: 5px;
	right: 5px;
	font-size: 12px;
	background-color: #C44;
	color: #FFF;
	text-align: center;
}
</style>
</head>

<body>
<div id="loading" style="display:none">載入中...</div>
請輸入英文訊息:<input type="text" id="msg" /><br />
<div id="echo_msg"></div>
<input type="submit" id="Submit" value="送出" onclick="ajaxSendRequest('echo.php')" />
</body>
</html>

PHP 部分:


<?php
$message = $_GET['message'];
sleep(2); // 睡一下吧,不然"載入中"會太快消失
echo strrev($message);
?>

Ajax, 程式筆記 , ,

  1. 五月 31st, 2006 at 09:56 | #1

    我试了哟,不错啊!
    你是台湾的朋友?

  2. 五月 31st, 2006 at 19:47 | #2

    是的
    歡迎多來參觀^^

  3. 八月 1st, 2006 at 18:53 | #3

    問一個問題,請問有辦法讓IE在傳送中文字串的時候,不會變成亂碼嗎?

    網頁、跟輸出結果的php都已經設定成UTF-8編碼了,可是還是變成亂碼哩orz

    不過Firefox就不會有這個問題 囧rz

  4. 八月 3rd, 2006 at 23:50 | #4

    to 筆筆:
    您是指使用 Ajax 在傳遞中文字會出現亂碼嗎?

  5. 八月 4th, 2006 at 09:03 | #5

    試試PHPRPC :)

  6. Nattily
    十月 25th, 2006 at 00:18 | #6

    試了, 真是很好。好想學習AJAX
    可以怎樣學好呢?

  7. azureshin
    十月 28th, 2006 at 01:38 | #7

    有AJAX後,想達到同步功能,就不需要Socket ?

  8. kiwi
    十二月 27th, 2006 at 14:44 | #8

    感恩大大 我是一個超級初學者
    我試過了 可是用到自己的網頁
    卻叫不出來ajaxSendRequest
    難道使用form action叫不出來附程式嗎~""~
    懇請大大解決我的疑惑...

  1. 五月 22nd, 2006 at 02:34 | #1