19-3 �� AJAX ��z�P�d��

¥»¤p¸`±N»¡©ú¦p¦ó¨Ï¥Î°ò¥» AJAX ·§©À¨Ó¹F¦¨«D¦P¨B¶Ç¿éªº¥\¯à¡CAJAX ªº¨Ï¥Î¤è¦¡¡A¥D­n¥]§t¤T­Ó°ò¥»¨BÆJ¡G
  1. ªñºÝ¡]¥Î¤áºÝ¡^ªºµo°e¨ç¼Æ¡G­t³d¦b±µ¦¬¥Dºô­¶ªº¨Æ¥ó«á¡A³]©w AJAX ª«¥ó¡A¨Ã¹ï¦øªA¾¹µo°e request ¥H±Ò°Ê¦øªA¾¹ºÝµ{¦¡½Xªº°õ¦æ¡C
  2. »·ºÝ¡]¦øªA¾¹ºÝ¡^ªºµ{¦¡½X¡G³q±`¬O¤@­Ó ASP ºô­¶¡A­t³d¦b¦øªA¾¹°õ¦æ¥²­n¤§¨BÆJ¡A¨Ò¦pÀˬd±b¸¹±K½X¡A©Î¬O¹ï¸ê®Æ®w¶i¦æ¬d¸ßµ¥¡C
  3. ªñºÝ¡]¥Î¤áºÝ¡^ªº±µ¦¬¨ç¼Æ¡G­t³d±µ¦¬¦øªA¾¹ªº°õ¦æµ²ªG¡A¨Ã±Nµ²ªG¥H«D¦P¨Bªº¤è¦¡Åã¥Ü¦b¥Dºô­¶¤W¡C
µL½× AJAX ªºÀ³¥Î¤è¦¡¦p¦ó½ÆÂø¡A¤W­z¤T­Ó¨BÆJ¬O¤£·|Åܤƪº°ò¥»­n¯À¡C¥H¤U§Ú­Ì±N¨Ï¥Î¤@­Ó²³æªº½d¨Ò¨Ó»¡©ú³o¤T­Ó°ò¥»¨BÆJ¡G

Example¡]ajax/asyncViaAjax01.htm¡^¡G

¦b¤W­z½d¨Ò¤¤¡A·í§AÂI¿ï¡u¨Ï¥Î AJAX Åã¥Ü¦øªA¾¹ªº®É¶¡¡v«á¡A´N·|¬Ý¨ì¦øªA¾¹ªº®É¶¡¤w¸gÅã¥Ü¦b¥Dºô­¶¤W¡A¦p¤U¡G

¦Ó³o¾ã­Ó¹Lµ{¨Ã¨S¦³¸g¥Ñºô­¶ªº­«¸ü¨Ó¹F¦¨¡C¦¹½d¨Òªº­ì©l½X¦p¤U¡G

­ì©lÀÉ¡]ajax/asyncViaAjax01.htm¡^¡G¡]¦Ç¦â°Ï°ì«ö¨â¤U§Y¥i«þ¨©¡^
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=big5">
</head>

<body>
<h2 align=center>¨Ï¥Î AJAX Åã¥Ü¦øªA¾¹ªº®É¶¡</h2>
<hr>

<script>
// ¥Î¤áºÝªº±µ¦¬¨ç¼Æ¡A­t³d¥H«D¦P¨B¤è¦¡¨Ó±µ¦¬¦øªA¾¹¦^¶Çªº¸ê®Æ¨ÃÅã¥Ü¦bºô­¶¤W
function displayTime() {
	if (ajax.readyState==4)
		if (ajax.status==200)
			document.getElementById('showResult').innerHTML = ajax.responseText;
		else
			alert ("¦øªA¾¹µo¥Í¿ù»~¡AµLªk¦^¶Ç¸ê®Æ¡I");
}

// ¥Î¤áºÝªºµo°e¨ç¼Æ¡A­t³d³]©w AJAX ª«¥ó¨ÃIJµo¦øªA¾¹ºô­¶ªº°õ¦æ
function getServerTime(url) {
	ajax = new ActiveXObject("Msxml2.XMLHTTP");
	ajax.onReadyStateChange=displayTime;	// ³]©w±µ¦¬¦øªA¾¹¸ê®Æªº¦^À³¨ç¼Æ
	ajax.open("GET", url, true);		// ³]©w ajax ª«¥óªº°Ñ¼Æ
	ajax.send("");				// °õ¦æ ajax
}
</script>

<input type="button" value="¨Ï¥Î AJAX Åã¥Ü¦øªA¾¹ªº®É¶¡" onClick="getServerTime('showTime.asp')">
<div id="showResult"></div>

</body>
</html>

¹ïÀ³©ó«e­zªº¤T­Ó°ò¥»¨BÆJ¡A§Ú­Ì¥i¥H¦C¥X¬ÛÃöªº¨ç¼Æ©Îºô­¶¡A¦p¤U¡G

  1. ªñºÝªºµo°e¨ç¼Æ¡GgetServerTime()¡C
  2. »·ºÝªºµ{¦¡½X¡GshowTime.asp¡C
  3. ªñºÝªº±µ¦¬¨ç¼Æ¡GdisplayTime()¡C
¥H¤U±N»¡©ú³o´X­Ó¨ç¼Æ©Îºô­¶ªº¬yµ{¡C
  1. ªñºÝªºµo°e¨ç¼Æ¬O getServerTime()¡A¥D­n­t³d·í¨Ï¥ÎªÌÂI¿ï«ö¶s«á¡A²£¥Í AJAX ª«¥ó¨Ã³]©w¤§¡AµM«á¹ï¦øªA¾¹µo¥X request¡A»¡©ú¦p¤U¡G
    1. ­º¥ý¡A§Ú­Ì¨Ï¥Î ajax = new ActiveXObject("Msxml2.XMLHTTP"); ¨Ó²£¥Í¤@­Ó AJAX ª«¥ó¡A§Q¥Î¦¹ª«¥ó¡A§Ú­Ì¥i¥H¹F¨ì«D¦P¨B¶Ç¿éªº¥\¯à¡C

      Hint
      ¦ý¥²¶·¯S§Oª`·Nªº¬O¡A²£¥Í AJAX ª«¥óªº¤è¦¡¡A¦b¤£¦PªºÂsÄý¾¹¡]¦p IE ¤Î FireFox¡^¦³¤£¦Pªº¤èªk¡A¬Æ¦Ü¦P¼Ë¬O IE ÂsÄý¾¹¡A¤£¦Pªºª©¥»¤]¦³¤£¦Pªº¤è¦¡¨Ó²£¥Í AJAX ª«¥ó¡A¥»½d¨Ò©Ò¨Ï¥Îªº¤è¦¡¡A¾A¥Î©ó IE 6.0 ¤§«áªºª©¥»¡C¬°¤F³B²z³o¨Ç¬Û®e©Êªº°ÝÃD¡A§Ú­Ì«Øijª½±µ±Ä¥Î JavaScript Framework¡A¨Ò¦p Prototype.js¡A¦³Ãö³o¨Ç²Ó¸`¡A«á¦b¤U¤@¤p¸`¤¶²Ð¡C

    2. ²£¥Í AJAX ª«¥ó¤§«á¡A§Ú­Ì§Y¥i¹ï¦¹ª«¥ó³]©w¦UºØ©Ê½è¡C­º¥ý¡A§Ú­Ì¨Ï¥Î ajax.onReadyStateChange=displayTime; ¨Ó³]©w±µ¦¬¦øªA¾¹¦^À³ªº¨ç¼Æ¡A¦b¦¹½d¨Ò¤¤¡A¦¹±µ¦¬¨ç¼Æ¬O displayTime()¡C
    3. ¨ä¦¸¡A§Ú­Ì¨Ï¥Î¤U¦C¤è¦¡¨Ó³]©w AJAX ª«¥óªº¨ä¥¦©Ê½è¡G ajax.open("GET", url, true); ¨ä¤¤ "GET" ¥Nªí¸ê®Æ¶Ç»¼ªº¤è¦¡¡Aurl ¥Nªí¦øªA¾¹µ{¦¡½X©Ò¦bªººô­¶¡]¦b¦¹¨Ò¬° showTime.asp¡^¡A¦Ó true «h¥Nªí¨Ï¥Î«D¦P¨B¶Ç¿é¡C¡]­Y¬O false¡A¥Nªí¨Ï¥Î¦P¨B¶Ç¿é¡C¡^
    4. ³Ì«á¡A§Ú­Ì¨Ï¥Î ajax.send(""); ¨Ó°e¥X AJAX ªº©R¥O¡A´«¥y¸Ü»¡¡A¦¹®É·|¥ý±Ò°Ê¦øªA¾¹ªºµ{¦¡½X¡]¦b¦¹¨Ò¬° showTime.asp¡^¡AµM«á¦A±Ò°Ê¥Î¤áºÝªº±µ¦¬¨ç¼Æ¡]¦b¦¹¨Ò¬° displayTime()¡^¡A±Nµ²ªG¥H«D¦P¨Bªº¤è¦¡Åã¥Ü¦b¥Ø«eºô­¶¤º¡C
  2. »·ºÝªºµ{¦¡½X¦ì©ó showTime.asp¡A¥H¥»¨Ò¦Ó¨¥¡A¨ä¥\¯à¬Û·í²³æ¡A¥u¬O¦L¥X²{¦bªº®É¶¡¡A¤º®e¦p¤U¡G

    ­ì©lÀÉ¡]ajax/showTime.asp¡^¡G¡]¦Ç¦â°Ï°ì«ö¨â¤U§Y¥i«þ¨©¡^
    <%@language=jscript%>
    <%//­t³dŪ¨ú¥Ø«e®É¶¡ªº AJAX »·ºÝµ{¦¡%>
    <%
    today=new Date();
    time=today.toString();
    Response.write("<font color=red>"+time+"</font>");
    %>
    

  3. ªñºÝªº±µ¦¬¨ç¼Æ¬O displayTime()¡A¥¦ªº¬yµ{µy·L½ÆÂø¤@¨Ç¡G
    1. Àˬd¦øªA¾¹µ{¦¡½X¬O§_°õ¦æ§¹²¦¡G if (ajax.readyState==4) readyState ¥Nªí ajax ¥Ø«eªºª¬ºA¡A¦Cªí¦p¤U¡G
      readyState ªº­È»¡©ú
      0©|¥¼±Ò©l
      1¤w¸g«Ø¥ß³sµ²
      2»·ºÝ¤w¸g¦¬¨ì­n¨D
      3»·ºÝµ{¦¡½X³B²z¤¤
      4³B²z§¹²¦
    2. ¦¹¥~¡A¦¹¨ç¼Æ¤]¥²¶·Àˬd¦øªA¾¹¦^À³¨ç¼Æ¬O§_°õ¦æµL»~¡G if (ajax.status==200) ¤]´N¬O»¡¡A¥u¦³·íºô­¶ showTime.asp ¦^¶Çªºª¬ºA½X¬O 200 ®É¡A¤~¥Nªí showTime.asp ªº°õ¦æµL»~¡C
    3. ¤@¤ÁµL»~«á¡A§Ú­Ì¤~±N AJAX ¦^¶Çªº¤å¦r¸ê°T¡]¦s©ñ©ó ajax.responseText¡^«ü©wµ¹ id ¬° showResult ªº°Ï¶ô¤º®e¡G document.getElementById('showResult').innerHTML = ajax.responseText; ¦¹®É§Ú­Ì´N¥i¥H¦b¥Dºô­¶¬Ý¨ì»·ºÝªº®É¶¡¡C

      Hint
      ¦øªA¾¹µ{¦¡½X¦^¶Çªº­ì©l¸ê°T¡A·|­ì«Ê¤£°Ê¦a©ñ¨ì responseText ¦¹©Ê½è¤¤¡C¦pªG¦øªA¾¹¦^¶Çªº¸ê°T¬O XML ¤å¥ó®æ¦¡¡A§Ú­Ì¥i¥H¥Ñ¥t¤@­Ó©Ê½è responseXML ¨ÓŪ¨ú XML ¤å¥ó¤ºªº¦U­Óª«¥ó¡C


JScript µ{¦¡³]­p»PÀ³¥Î¡G¥Î©ó¦øªA¾¹ºÝªº ASP Àô¹Ò