AJAX全称为“Asynchronous JavaScript and XMLâ€ï¼ˆå¼‚æ¥JavaScriptå’ŒXMLåQ‰ï¼Œæ˜¯æŒ‡ä¸€¿U创å»ÞZº¤äº’å¼¾|‘页应用的网™åµå¼€å‘技术ã€?br />
主è¦åŒ…å«äº†ä»¥ä¸‹å‡ ¿U技术:
AjaxåQˆAsynchronous JavaScript + XMLåQ‰çš„定义
åŸÞZºŽwebæ ‡å‡†åQˆstandards-based presentationåQ‰XHTML+CSS的表½Cºï¼›
使用 DOMåQˆDocument Object ModelåQ‰è¿›è¡ŒåŠ¨æ€æ˜¾½CºåŠäº¤äº’åQ?
使用 XML å’?XSLT ˜q›è¡Œæ•°æ®äº¤æ¢åŠç›¸å…Ïx“作;
使用 XMLHttpRequest ˜q›è¡Œå¼‚æ¥æ•°æ®æŸ¥è¯¢ã€æ£€ç´¢ï¼›
使用 JavaScript ž®†æ‰€æœ‰çš„东西¾l‘定在一赗÷€?br />
Â ä¼ ç»Ÿçš„web应用å…许用户填写表å•(form)åQŒå½“æäº¤è¡¨å•æ—¶å°±å‘webæœåС噍å‘é€ä¸€ä¸ªè¯·æ±‚。æœåŠ¡å™¨æŽ¥æ”¶òq¶å¤„ç†ä¼ æ¥çš„表å•åQŒç„¶åŽè¿”回一个新的网™åüc€‚è¿™ä¸ªåšæ³•浪费了许多带宽åQŒå› 为在å‰åŽä¸¤ä¸ª™åµé¢ä¸çš„大部分HTML代ç 往往是相åŒçš„。由于毋ơ应用的交互都需è¦å‘æœåС噍å‘é€è¯·æ±‚,应用的å“应时间就ä¾èµ–于æœåŠ¡å™¨çš„å“åº”æ—¶é—´ã€‚è¿™å¯ÆD‡´äº†ç”¨æˆïL•Œé¢çš„å“应比本地应用慢得多ã€?
 与æ¤ä¸åŒåQŒAJAX应用å¯ä»¥ä»…呿œåС噍å‘é€åƈå–回必需的数æ®ï¼Œå®ƒä‹É用SOAP或其它一些基于XMLçš„web service接å£åQŒåƈ在客æˆïL«¯é‡‡ç”¨JavaScriptå¤„ç†æ¥è‡ªæœåŠ¡å™¨çš„å“åº”ã€‚å› ä¸ºåœ¨æœåŠ¡å™¨å’Œ‹¹è§ˆå™¨ä¹‹é—´äº¤æ¢çš„æ•°æ®å¤§é‡å‡å°‘åQŒç»“果我们就能看到å“åº”æ›´å¿«çš„åº”ç”¨ã€‚åŒæ—¶å¾ˆå¤šçš„处ç†å·¥ä½œå¯ä»¥åœ¨å‘凸™¯·æ±‚的客户端机器上完æˆåQŒæ‰€ä»¥WebæœåŠ¡å™¨çš„å¤„ç†æ—‰™—´ä¹Ÿå‡ž®‘了ã€?
Ajax应用½E‹åºçš„优势在于:
1. é€šè¿‡å¼‚æ¥æ¨¡å¼åQŒæå‡äº†ç”¨æˆ·ä½“验
2. 优化了æµè§ˆå™¨å’ŒæœåŠ¡å™¨ä¹‹é—´çš„ä¼ è¾“ï¼Œå‡å°‘ä¸å¿…è¦çš„æ•°æ®å¾€˜q”,å‡å°‘了带宽å ç”?
3. Ajax引擎在客æˆïL«¯˜q行åQŒæ‰¿æ‹…了一部分本æ¥ç”±æœåŠ¡å™¨æ‰¿æ‹…çš„å·¥ä½œï¼Œä»Žè€Œå‡ž®‘了大用户é‡ä¸‹çš„æœåŠ¡å™¨è´Ÿè½½ã€?
**************************************************************************************************
xmlhttp的属性:
onreadystatechange  指定当readyStateå±žæ€§æ”¹å˜æ—¶çš„事件处ç†å¥æŸ„,åªå†™ ã€?br />readyState   ˜q”回当å‰è¯äh±‚的状æ€ï¼Œåªè¯»ã€?br />responseBody   ž®†å›žåº”ä¿¡æ¯æ£æ–‡ä»¥unsigned byte数组形弘q”回åQŒåªè¯?
responseStream    以Ado Stream对象的åÅžå¼è¿”回å“应信æ¯ï¼Œåªè¯» ã€?br />responseText    ž®†å“应信æ¯ä½œä¸ºå—½W¦ä¸²˜q”回åQŒåªè¯?ã€?br />responseXML    ž®†å“åº”ä¿¡æ¯æ ¼å¼åŒ–为Xml Document对象òq¶è¿”回,åªè¯» ã€?br />status     ˜q”回当å‰è¯äh±‚çš„http状æ€ç åQŒåªè¯?ã€?br />statusText    ˜q”回当å‰è¯äh±‚çš„å“应行状æ€ï¼Œåªè¯» ã€?br />
xmlhttp的方法:
abort Â Â Â Â å–æ¶ˆå½“å‰è¯äh±‚
getAllResponseHeaders  获å–å“应的所有httpå¤?
getResponseHeader  从å“应信æ¯ä¸èŽ·å–æŒ‡å®šçš„httpå¤?
open     创å¾ä¸€ä¸ªæ–°çš„httpè¯äh±‚åQŒåƈ指定æ¤è¯·æ±‚çš„æ–ÒŽ³•ã€URL以åŠéªŒè¯ä¿¡æ¯(用户å?密ç ) //常用
send     å‘é€è¯·æ±‚到httpæœåŠ¡å™¨åÆˆæŽ¥æ”¶å›žåº” //常用
setRequestHeader  å•独指定è¯äh±‚çš„æŸä¸ªhttpå¤?
è¯æ³•åQ?br />onreadystatechang 指定当readyStateå±žæ€§æ”¹å˜æ—¶çš„事件处ç†å¥æŸ„,åªå†™
xmlHttpObj.onreadystatechange=a;
function a(){
 if(xmlHttpObj.readyState==4){
  if(xmlHttpObj.stateus==200){
    alert(xmlHttpObj.responseText);
  }else{
    alert("åŠ è²å¤ÞpÓ|åQ\nåŽŸå› åQ?+xmlHttpObj.stateText);
  }
 }
}
readyState ˜q”回当å‰è¯äh±‚的状æ€ï¼Œåªè¯»ã€?br />
xmlHttpObj.readyState;
å‚è§å‡½æ•°a;
readyStateåQŒå˜é‡ã€‚定义如下:
0 (未åˆå§‹åŒ–)    对象已å¾ç«‹ï¼Œä½†æ˜¯ž®šæœªåˆå§‹åŒ–(ž®šæœªè°ƒç”¨openæ–ÒŽ³•åQ?
1 (åˆå§‹åŒ?    对象已å¾ç«‹ï¼Œž®šæœªè°ƒç”¨sendæ–ÒŽ³•
2 (å‘逿•°æ?    sendæ–ÒŽ³•已调用,但是当å‰çš„状æ€åŠhttp头未çŸ?
3 (æ•°æ®ä¼ é€ä¸)    已接攉™ƒ¨åˆ†æ•°æ®ï¼Œå› 䨓å“应åŠhttp头ä¸å…¨ï¼Œ˜q™æ—¶é€šè¿‡responseBodyå’ŒresponseText获å–部分数æ®ä¼šå‡ºçŽ°é”™è¯¯ï¼Œ
4 (完æˆ) Â Â Â æ•°æ®æŽ¥æ”¶å®Œæ¯•,æ¤æ—¶å¯ä»¥é€šè¿‡é€šè¿‡responseBodyå’ŒresponseText获å–完整的回应数æ?
responseText ž®†å“应信æ¯ä½œä¸ºå—½W¦ä¸²˜q”回åQŒåªè¯?ã€?br />
xmlHttpObj.responseText;
responseBody ,responseStream ,responseText ,responseXML ä¸Žä¹‹ç›æ€¼¼
responseXMLå¯ä»¥˜q”å›žä¸€ä¸ªæ–‡æ¡£æ ‘(DOM)åQŒå¯ä»¥ä‹É用document.getElementsByTagName,document.getElementsByTagNameNS,document.getElementById½{‰å¯¹å…¶æ“ä½?br />
stateus ˜q”回当å‰è¯äh±‚çš„http状æ€ç åQŒåªè¯?ã€?br />
xmlHttpObj.stateus;
å‚è§å‡½æ•°a;
é•¿æ•´å½¢æ ‡å‡†http状æ€ç åQŒå®šä¹‰å¦‚下:
å€? æè¿°
100 Â Continue
101 Â Switching protocols
200 Â OK
201 Â Created
202 Â Accepted
203 Â Non-Authoritative Information
204 Â No Content
205 Â Reset Content
206 Â Partial Content
300 Â Multiple Choices
301 Â Moved Permanently
302 Â Found
303 Â See Other
304 Â Not Modified
305 Â Use Proxy
307 Â Temporary Redirect
400 Â Bad Request
401 Â Unauthorized
402 Â Payment Required
403 Â Forbidden
404 Â Not Found
405 Â Method Not Allowed
406 Â Not Acceptable
407 Â Proxy Authentication Required
408 Â Request Timeout
409 Â Conflict
410 Â Gone
411 Â Length Required
412 Â Precondition Failed
413 Â Request Entity Too Large
414 Â Request-URI Too Long
415 Â Unsupported Media Type
416 Â Requested Range Not Suitable
417 Â Expectation Failed
500 Â Internal Server Error
501 Â Not Implemented
502 Â Bad Gateway
503 Â Service Unavailable
504 Â Gateway Timeout
505 Â HTTP Version Not Supported
statusText ˜q”回当å‰è¯äh±‚çš„å“应行状æ€?br />
xmlHttpObj.stateText;
å‚考函数a;
open 创å¾ä¸€ä¸ªæ–°çš„httpè¯äh±‚åQŒåƈ指定æ¤è¯·æ±‚çš„æ–ÒŽ³•ã€URL以åŠéªŒè¯ä¿¡æ¯
xmlHttpObj.open(Method,URL[,Async][,User][,PassWord]);
[]表示å¯é€?br />
傿•°åQ?br />Method:POST|GET(大å°å†™ä¸æ•感)
URL:è¯äh±‚çš„URL地å€åQŒå¯ä»¥äØ“¾l对地å€ä¹Ÿå¯ä»¥äؓ相对地å€ã€?br />Async:[true|fase] 是å¦åŒæ¥åQŒé»˜è®¤äØ“trueã€?br />User:如果æœåŠ¡å™¨éœ€è¦éªŒè¯ï¼Œæ¤å¤„指定用户å,如果未指定,当æœåŠ¡å™¨éœ€è¦éªŒè¯æ—¶åQŒåˆ™ä¼šå¼¹å‡ºéªŒè¯çª—å£ã€?
PasswordåQšéªŒè¯ä¿¡æ¯ä¸çš„密ç 部分,如果用户å䨓½Iºï¼Œåˆ™æ¤å€¼å°†è¢«å¿½ç•¥ã€?br />
send å‘é€è¯·æ±‚到httpæœåŠ¡å™¨åÆˆæŽ¥æ”¶å›žåº”
xmlHttpObj.send([Text]);
傿•°åQ?br />Text:è¦å‘é€çš„æ•°æ®åQŒé»˜è®¤äØ“½I?null);
************************************************************************************************************
一个例å:
创å¾ä¸€ä¸ªxmlhttp对象åQšçŽ°åœ¨çš„¾l对多数‹¹è§ˆå™¨éƒ½å¢žåŠ äº†å¯¹XmlHttp的支æŒï¼ŒIEä¸ä‹É用ActiveXObjectæ–¹å¼åˆ›å¾XmlHttp对象åQŒå…¶ä»–æµè§ˆå™¨å¦‚:Firefoxã€Operaã€NetScape½{‰é€šè¿‡window.XMLHttpRequestæ¥åˆ›å»ºxmlhttp对象ã€?br />var xmlhttp;
function new_xmlHttp(){
 var a=null;
 if(window.ActiveXObject){//IE(æ¤å¤„çš„IE泛指所有用IEå†…æ ¸çš„æµè§ˆå™¨åQŒä¸‹å?
  a=new ActiveXObject("Msxml2.XMLHTTP");
  if(!a){
    a=new ActiveXObject("Microsoft.XMLHTTP")
  }
 }else if(window.XMLHttpRequest){//Mozilla(FireFox,NS)
  a=new XMLHttpRequest()
 }
 return a;
}
xmlhttp=new_xmlhttp();
xmlhttp.open("GET","http://localhost/xmlfile.xml",false);//创å¾ä¸€ä¸ªæ–°çš„HTTPè¯äh±‚åQŒåƈ指定URL
xmlhttp.send();//å‘é€?br />xmlhttp.onreadystatechange=function(){
 if(xmlhttp.readyState==4){
  if(xmlhttp.stateus==200){
    alert(xmlhttp.responseText);
  }else{
    alert("åŠ è²å¤ÞpÓ|åQ\nåŽŸå› åQ?+xmlhttp.stateText);
  }
 }
}
一个简å•完整的XMLHTTP例ååQ?br />ž®†ä»¥ä¸‹ä»£ç ä¿å˜äؓ本地HTMLæ–‡äšgå†ä‹Éç”?br />CODE:
<!--begin-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"[url]http://www.w3.org/TR/html4/loose.dtd[/url]">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>一个简å•çš„XMLHTTP例å</title>
</head>
<body>
<script>
var oDiv
var xh
function getXML()
{
oDiv = document.all.m
oDiv.innerHTML = "æ£åœ¨è£…è²æ 目数æ®åQŒè¯·½E侯......."
oDiv.style.display= ""
xh = new ActiveXObject("Microsoft.XMLHTTP")
xh.onreadystatechange = getReady
xh.open("GET",a.value,true)
xh.send()
}
function getReady()
{
if(xh.readyState==4)
{
if(xh.status==200)
{
 oDiv.innerHTML = "完æˆ"
}
else
{
 oDiv.innerHTML = "抱æ‰åQŒè£…载数æ®å¤±è´¥ã€‚åŽŸå› ï¼š" + xh.statusText
}
}
}
</script>
<body>
xmlhttp异æ¥çš„例å?
URL:<input name=a value="[url]http://s041149.stu.cdut.edu.cn/xml/myxmltest.xml[/url]" style="width:600px">
<input onclick="getXML()" type="button" value="得到æºä»£ç ?>
<input onclick="if(xh && xh.responseText) {alert(xh.responseText);oDiv.innerHTML=xh.responseText}" type="button" value="昄¡¤ºæºä»£ç ?>
<div id=m></div>
</body>
</html>
<!--end-->
例ååQ?br />仿GOOGLEä¸ªæ€§åŒ–ä¸»é¡µçš„æ‹–åŠ¨åÆˆä¿å˜å®šä½,http://s041149.stu.cdut.edu.cn/xml/myxmltest.xmlä¸ÞZ¿å˜ç›¸å¯¹ä½¾|®çš„XMLæ–‡äšgåQŒè¯·æ³¨æ„拖动å‰åŽçš„å˜åŒ?br />http://s041149.stu.cdut.edu.cn/xml/åQˆç»†èŠ‚é—®é¢˜å¯E-MAIL:hktx[at]163[dot]comåQ?br />