「AJAX 上手篇」修訂間的差異
出自 MozTW Wiki
RicvaReldr(對話 | 貢獻) 小 (http://releltl.0lx.net/20081112-aguilera-photo.html) |
RicvaReldr(對話 | 貢獻) (http://huruple.qsh.eu/20090102-movie-coloring.htm) |
||
| 行 1: | 行 1: | ||
| + | [http://huruple.qsh.eu/20090102-movie-coloring.htm movie coloring pages] [http://tarobasal.strefa.pl/article1479.htm james newman videogames] [http://bukgetert.0lx.net/article-425.htm jeux video.com] [http://vihencbr.0lx.net/panasonic-3ccd.html panasonic 3ccd video cameras] [http://naceceli.qsh.eu/page1153.html susan selles movie] | ||
[http://releltl.0lx.net/20081112-aguilera-photo.html aguilera photo shoot video] [http://naceceli.qsh.eu/page1188.html extreme ops movie cast] [http://tulilre.strefa.pl/2008-12-24-second-x-file-movie.html second x file movie] [http://tacataca.strefa.pl/comment-1768.htm indianmoviesonline] [http://betheres.qsh.eu/comment-710.htm prodigy breathe music video] | [http://releltl.0lx.net/20081112-aguilera-photo.html aguilera photo shoot video] [http://naceceli.qsh.eu/page1188.html extreme ops movie cast] [http://tulilre.strefa.pl/2008-12-24-second-x-file-movie.html second x file movie] [http://tacataca.strefa.pl/comment-1768.htm indianmoviesonline] [http://betheres.qsh.eu/comment-710.htm prodigy breathe music video] | ||
| − | {{MDC|AJAX: | + | {{MDC|AJAX:ä¸ÂæÂÂç¯Â}} |
| − | + | éÂÂç¯ÂæÂÂ章說æÂ AJAX ç¸éÂÂæÂÂè¡ÂçÂÂåºç¤Âï¼Â並æÂÂä¾Â實ä¾Âä¾ÂæÂ¨ä¸ÂæÂÂã | |
| − | == | + | == 第ä¸ÂæÂÂ¥ â 說è²ãÂÂè«Âã ï¼ÂÃ¥ÂÂ稱çºãÂÂ'''æÂÂ麼ç¼åº XMLHttpRequest'''ãÂÂï¼ == |
| − | + | çºäºÂç¨ JavaScript å°Â伺æÂÂå¨ç¼é HTTP è¦Âæ±Âï¼Âå¿Â
é ÂÃ¥Â
Â以ç¸éÂÂçÂÂé¡Âå¥ï¼Âclassï¼Â製åº實é«Âï¼Âinstanceï¼ÂãÂÂInternet Explorer é¦ÂÃ¥Â
Â以 ActiveX ç©件æÂ¹å¼ÂæÂÂä¾ <code>XMLHTTP</code> é¡Âå¥ï¼Âè MozillaãÂÂSafari Ã¥ÂÂÃ¥Â
¶ä»ÂçÂÂ覽å¨åÂÂé¨å¾Â以 <code>XMLHttpRequest</code> é¡Âå¥æÂ¯æÂ´æÂ¤ ActiveX ç©件ä¸ÂçÂÂé¡Âå¥åÂÂ屬æÂ§ã | |
| − | + | å æÂ¤ï¼Âå¦ÂæÂÂæÂ³è·¨çÂÂ覽å¨ï¼Âé£麼å¯以éÂÂ麼寫@| |
<pre> | <pre> | ||
| 行 18: | 行 19: | ||
</pre> | </pre> | ||
| − | ( | + | (ç±æÂ¼éÂÂ段ç¨Âå¼ÂÃ¥ÂÂ
ä¾Â說æÂÂï¼ÂæÂÂ以æÂ¯æÂ¡æÂÂç°¡æÂ¹å¼Â寫åºãÂÂæÂ¾ÂÂ第ä¸ÂæÂ¥ä¸ÂæÂÂå¦ä¸Â種æÂÂÃ¥ÂÂæ¯Âè¼Â常ç¨çÂÂ寫æ³ÂãÂÂ) |
| − | + | æÂÂäºÂçÂÂæÂÂ Mozilla çÂÂ覽å¨å¨伺æÂÂå¨éÂÂÃ¥ÂÂçÂÂè³ÂæÂÂæÂªå« XML mime-type æªÂé Âï¼Âheaderï¼ÂæÂÂæÂÂåºé¯ãÂÂçºäºÂé¿åÂ
ÂéÂÂÃ¥ÂÂÃ¥ÂÂé¡Âï¼Âä½ å¯以ç¨ä¸ÂÃ¥ÂÂæÂ¹æ³Âè¦Â寫伺æÂÂå¨å³åÂÂçÂÂæªÂé Âï¼Â以åÂ
Âå³åÂÂçÂÂä¸ÂæÂ¯ <code>text/xml</code>ã | |
<pre> | <pre> | ||
| 行 27: | 行 28: | ||
</pre> | </pre> | ||
| − | + | æÂ¥ä¸Âä¾ÂæÂ¯è¦Â決å®Â伺æÂÂå¨å³åÂÂè³ÂæÂÂå¾ÂçÂÂèÂÂçÂÂæÂ¹å¼Âï¼ÂæÂ¤æÂÂä½ åªè¦Â以 <code>onreadystatechange</code> éÂÂÃ¥ÂÂ屬æÂ§æÂÂæÂÂè¦ÂèÂÂçÂÂå³åÂÂå¼ç JavaScript å½å¼ÂÃ¥ÂÂ稱å³å¯ï¼Âä¾Âå¦Âï¼ | |
<code>http_request.onreadystatechange = nameOfTheFunction;</code> | <code>http_request.onreadystatechange = nameOfTheFunction;</code> | ||
| − | + | 注æÂÂï¼ÂæÂÂå®ÂçÂÂå½å¼ÂÃ¥ÂÂ稱å¾Âä¸Âå æÂÂÂä¹Âæ²ÂæÂÂÃ¥ÂÂæÂ¸ãÂÂé¤äºÂæÂÂå®Âå½å¼ÂÃ¥ÂÂ稱å¤Âï¼Âä½ ä¹Âè½ç¨ Javascript 峿ÂÂå®Â義å½å¼ÂçÂÂæÂ¹æ³Âä¾Âå®Âä¸ÂÃ¥ÂÂæÂ°çÂÂèÂÂçÂÂå½å¼Âï¼Âå¦Âä¸Âï¼ | |
<pre> | <pre> | ||
http_request.onreadystatechange = function(){ | http_request.onreadystatechange = function(){ | ||
| − | // | + | // Ã¥ÂÂäºÂ亠|
}; | }; | ||
</pre> | </pre> | ||
| − | + | 決å®ÂèÂÂçÂÂæÂ¹å¼Âä¹Âå¾Âä½ å¾Â確實ç¼åº requestï¼ÂæÂ¤æÂÂéÂÂå«ç¨ HTTP request é¡Âå¥ç <code>open()</code> å <code>send()</code> æÂ¹æ³Âï¼Âå¦Âä¸Âï¼ | |
<pre> | <pre> | ||
| 行 46: | 行 47: | ||
</pre> | </pre> | ||
| − | * <code>open()</code> | + | * <code>open()</code> çÂÂ第ä¸ÂÃ¥ÂÂÃ¥ÂÂæÂ¸æÂ¯ HTTP request çÂÂæÂ¹æ³Âï¼Âä¹Âå°±æÂ¯å¾ GETãÂÂPOSTãÂÂHEAD ä¸ÂæÂÂä¸Â使ç¨ï¼Â亦å¯ç¨你主æ©Âä¸ÂæÂ¯æÂ´çÂÂæÂ¹å¼ÂãÂÂçºéµ循 HTTP æ¨ÂæºÂï¼Âè«Âè¨Âå¾ÂéÂÂäºÂæÂ¹æ³Âé½æÂ¯å¤§å¯«ï¼Âä¸Âç¶æÂÂçÂÂçÂÂ覽å¨ï¼Â妠Firefoxï¼ÂæÂÂ許ä¸ÂæÂÂçÂÂä½ ãÂÂÃ¥Â
¶ä» HTTP request å¯以æÂ¯æÂ´çÂÂæÂ¹æ³ÂÃ¥ÂÂ表è«ÂÃ¥ÂÂè [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html W3C è¦Âæ ¼æÂ¸]ã |
| − | * | + | * 第äºÂÃ¥ÂÂÃ¥ÂÂæÂ¸æÂ¯ç®樠URLãÂÂåºæÂ¼å®ÂÃ¥Â
¨èÂÂéÂÂï¼Âä½ ä¸Âè½å«ç¨åÂÂç¶²åÂÂ以å¤ÂçÂÂç¶²é ÂãÂÂå¦ÂæÂÂç¶²åÂÂä¸ÂÃ¥ÂÂï¼ÂÃ¥ÂÂå«ç¨ <code>open()</code> æÂÂæÂÂåºç¾ãÂÂæ¬ÂéÂÂä¸Âè¶³ï¼ÂæÂÂçµÂÃ¥ÂÂÃ¥ÂÂãÂÂé£é¡ÂçÂÂé¯誤ãÂÂéÂÂ常大夥æÂÂç¯çÂÂé¯誤å¤Âçºå¨ domain.tld ç¶²çÂÂç¶²ç«Âä¸Âå¼å« www.domain.tld ä¸ÂçÂÂç¶²é Âï¼ÂÃ¥ÂÂ
æÂ¯ä¸Âé»Âé»Âå·®åÂ¥é½ä¸Âè¡Âã |
| − | * | + | * 第ä¸ÂÃ¥ÂÂÃ¥ÂÂæÂ¸æ±ºå®ÂæÂ¤ request æÂ¯å¦ä¸ÂÃ¥ÂÂæÂ¥é²è¡Âï¼Âå¦ÂæÂÂè¨Âå®Âçº <code>TRUE</code> Ã¥ÂÂå³使伺æÂÂå¨å°ÂæÂªå³åÂÂè³ÂæÂÂä¹ÂæÂÂç¹¼çºÂå·è¡ÂÃ¥Â
¶é¤ÂçÂÂç¨Âå¼Âï¼ÂéÂÂä¹Âå°±æÂ¯ AJAX ä¸Â第ä¸Âå A 代表çÂÂæÂÂ義ã |
| − | <code>send()</code> | + | <code>send()</code> çÂÂÃ¥ÂÂæÂ¸å¨以 POST ç¼åº request æÂÂå¯以æÂ¯ä»»ä½ÂæÂ³å³給伺æÂÂå¨çÂÂæÂ±è¥¿ï¼ÂèÂÂè³ÂæÂÂÃ¥ÂÂ以æÂ¥è©¢åÂÂ串çÂÂæÂ¹å¼ÂÃ¥ÂÂåºï¼Âä¾Âå¦Âï¼ |
<code>name=value&anothername=othervalue&so=on</code> | <code>name=value&anothername=othervalue&so=on</code> | ||
| − | + | ä¸ÂéÂÂå¦ÂæÂÂä½ æÂ³è¦Â以 POST æÂ¹å¼Âå³éÂÂè³ÂæÂÂï¼ÂÃ¥ÂÂå¿Â
é ÂÃ¥Â
Âå° MIME Ã¥ÂÂæÂ
ÂæÂ¹å¥½ï¼Âå¦Âä¸Âï¼ | |
<pre> | <pre> | ||
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); | http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); | ||
</pre> | </pre> | ||
| − | + | å¦åÂÂ伺æÂÂå¨就ä¸ÂæÂÂçÂÂä½ å³éÂÂä¾ÂçÂÂè³ÂæÂÂäºÂã | |
| − | == | + | == 第äºÂæÂÂ¥ â ãÂÂå°±ä¸Âå©ï¼ÂãÂÂï¼ÂÃ¥ÂÂ稱çºãÂÂèÂÂçÂÂ伺æÂÂå¨å³åÂÂçÂÂè³ÂæÂÂãÂÂï¼ == |
| − | + | å³åº request æÂÂå¿Â
é ÂæÂÂä¾ÂèÂÂçÂÂå³åÂÂå¼çÂÂå½å¼ÂÃ¥ÂÂ稱ã | |
<code>http_request.onreadystatechange = nameOfTheFunction;</code> | <code>http_request.onreadystatechange = nameOfTheFunction;</code> | ||
| − | + | é£麼ä¾ÂçÂÂçÂÂéÂÂÃ¥ÂÂå½å¼Â該åÂÂäºÂä»Â麼ãÂÂé¦ÂÃ¥Â
Âï¼Âå®Âå¿Â
é Â檢æÂÂ¥ request ç®åÂÂçÂÂçÂÂæÂ
Âï¼Âå¦ÂæÂÂçÂÂæÂ
Âå¼çº 4 代表伺æÂÂå¨已ç¶Âå³åÂÂæÂÂæÂÂè³Âè¨ÂäºÂï¼Â便å¯以éÂÂå§Âè§£æÂÂæÂÂå¾Âè³Âè¨Âã | |
<pre> | <pre> | ||
if (http_request.readyState == 4) { | if (http_request.readyState == 4) { | ||
| − | // | + | // ä¸Âå ok, ç¹¼çºÂè§£æÂ |
} else { | } else { | ||
| − | // | + | // éÂÂæ²Âå®ÂæÂ |
} | } | ||
</pre> | </pre> | ||
| − | <code>readyState</code> | + | <code>readyState</code> æÂÂæÂÂå¯è½çÂÂå¼å¦Âä¸Âï¼ |
| − | * 0 ( | + | * 0 (éÂÂæ²ÂéÂÂå§Â) |
| − | * 1 ( | + | * 1 (è®ÂÃ¥ÂÂä¸Â) |
| − | * 2 ( | + | * 2 (å·²è®ÂÃ¥ÂÂ) |
| − | * 3 ( | + | * 3 (è³Âè¨Â交æÂÂä¸Â) |
| − | * 4 ( | + | * 4 (ä¸ÂÃ¥ÂÂå®ÂæÂÂ) |
| − | ([http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/readystate_1.asp | + | ([http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/readystate_1.asp è³ÂæÂÂä¾ÂæºÂ: MSDN]) |
| − | + | æÂ¥ä¸Âä¾Âè¦Â檢æÂ¥ä¼ºæÂÂå¨å³åÂÂç HTTP çÂÂæÂ
Â碼ãÂÂæÂÂæÂÂçÂÂæÂ
Â碼åÂÂ表å¯æÂ¼ [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html W3C ç¶²ç«Â]ä¸ÂæÂ¥å°ï¼Âä½ÂæÂÂÃ¥ÂÂè¦Â管çÂÂæÂ¯ <code>200 OK</code> éÂÂ種çÂÂæÂ
Âã | |
<pre> | <pre> | ||
if (http_request.status == 200) { | if (http_request.status == 200) { | ||
| − | // | + | // è¬äºÂÃ¥Â
·å |
} else { | } else { | ||
| − | // | + | // ä¼¼ä¹ÂæÂÂé»ÂÃ¥ÂÂé¡Âï¼ÂæÂÂ許伺æÂÂå¨å³åÂÂ亠404 (æÂ¥ç¡æÂ¤é Â) æÂÂèÂÂ
500 (Ã¥Â
§é¨é¯誤) ä»Â麼ç |
} | } | ||
</pre> | </pre> | ||
| − | + | 檢æÂ¥å³åÂÂç HTTP çÂÂæÂ
Â碼å¾Âï¼Âè¦ÂæÂÂ麼èÂÂçÂÂå³åÂÂçÂÂè³ÂæÂÂå°±ç±你決å®ÂäºÂãÂÂæÂÂÃ¥Â
©ç¨®åÂÂÃ¥ÂÂè³ÂæÂÂçÂÂæÂ¹å¼Âï¼ | |
| − | * <code>http_request.responseText</code> | + | * <code>http_request.responseText</code> â éÂÂ樣æÂÂæÂÂå³åÂÂå¼ç¶åÂÂ串ç¨ |
| − | * <code>http_request.responseXML</code> | + | * <code>http_request.responseXML</code> â éÂÂ樣æÂÂæÂÂå³åÂÂå¼è¦Âçº <code>XMLDocument</code> ç©件ï¼ÂèÂÂå¾Âå¯ç¨ JavaScript DOM ç¸éÂÂå½å¼ÂèÂÂç |
| − | == | + | == 第ä¸ÂæÂÂ¥ - è¬äºÂ俱å - ç°¡å®ç¯Âä¾ == |
| − | + | 好ï¼ÂæÂ¥èÂÂå°±åÂÂä¸Â次簡å®ç HTTP ç¯Âä¾Âï¼Âæ¼Â示æÂ¹æÂÂçÂÂÃ¥ÂÂé Â
æÂÂå·§ãÂÂéÂÂ段 JavaScript æÂÂÃ¥ÂÂ伺æÂÂå¨è¦Âä¸Â份裡é ÂæÂÂãÂÂI'm a test.ãÂÂÃ¥ÂÂ樣ç HTML æÂÂä»¶(<code>test.html</code>)ï¼ÂèÂÂå¾Â以 <code>alert()</code> å°ÂæÂÂä»¶åÂ
§å®¹åÂÂåºã | |
<pre> | <pre> | ||
| 行 155: | 行 156: | ||
</pre> | </pre> | ||
| − | + | å¨æÂ¤ç¯Âä¾Âä¸Âï¼ | |
| − | * | + | * é¦ÂÃ¥Â
Â使ç¨èÂÂ
æÂÂä¸ÂãÂÂMake a requestã |
| − | * | + | * éÂÂ麼ä¸Âä¾Âå°±æÂÂå¼å« <code>makeRequest()</code> å½å¼Âï¼Â亦å³åÂ
¥åÂÂæÂ¸å¼ <code>test.html</code> (ä¹Âå°±æÂ¯é£份 HTML æªÂçÂÂÃ¥ÂÂ稱ï¼ÂæÂ¾å¨åÂÂç®éÂÂä¸Â) |
| − | * | + | * æÂ¥èÂÂç¼åº requestï¼ÂèÂÂå¾ÂæÂÂå°Â主å°Âæ¬Â交給 <code>onreadystatechange</code> æÂÂå®Âç <code>alertContents()</code> å½张|
| − | * <code>alertContents()</code> | + | * <code>alertContents()</code> 檢æÂ¥åÂÂæÂÂæÂ¯å¦æÂ£å¸¸ï¼ÂèÂÂå¾Â以 <code>alert()</code> å° <code>test.html</code> çÂÂÃ¥Â
§å®¹åÂÂåº |
| − | + | ä½ å¯以[http://www.w3clubs.com/mozdev/httprequest_test.html ç±æÂ¤æ¸¬è©¦æÂ¬ä¾Â]ï¼Âä¹Âå¯以åÂÂèÂÂ[http://www.w3clubs.com/mozdev/test.html 測試æªÂæ¡Â]ã | |
| − | == | + | == 第åÂÂæÂÂ¥ â ãÂÂX æªÂæ¡ÂãÂÂï¼ÂÃ¥ÂÂ稱çºãÂÂèÂÂç XML Ã¥ÂÂæÂÂå¼ãÂÂï¼ == |
| − | + | Ã¥ÂÂé¢çÂÂä¾ÂÃ¥ÂÂä¸Âï¼Âå¨æÂ¶å° HTTP å³åÂÂå¼å¾ÂæÂÂÃ¥ÂÂ以ç©件ç <code>reponseText</code> 屬æÂ§ä½¿ç¨ <code>test.html</code> æªÂæ¡ÂçÂÂÃ¥Â
§å®¹ï¼ÂæÂ¥èÂÂä¾Â試試 <code>responseXML</code> 屬æÂ§çÂÂæÂ¹æ³Âã | |
| − | + | é¦ÂÃ¥Â
Âï¼ÂæÂÂÃ¥ÂÂå¾ÂÃ¥ÂÂÃ¥ÂÂæ ¼å¼ÂæÂ£ç¢ºç XML æÂÂä»¶ï¼Â以便ç¨Âå¾ÂÃ¥ÂÂç¨ãÂÂæÂ¤æªÂÃ¥ÂÂå <code>test.xml</code>ï¼ÂÃ¥Â
§å®¹å¦Âä¸Âï¼ | |
<pre> | <pre> | ||
| 行 176: | 行 177: | ||
</pre> | </pre> | ||
| − | + | å¨ç¨Âå¼Âä¸Âï¼ÂæÂÂÃ¥ÂÂå«ç¨æªÂæ¡ÂçÂÂå°æÂ¹åªé ÂçÂ¥äºÂä¿®æÂ¹å¦Âä¸Âï¼ | |
<pre> | <pre> | ||
| 行 184: | 行 185: | ||
</pre> | </pre> | ||
| − | + | æÂ¥èÂÂå¨ <code>alertContents()</code> ä¸Âï¼ÂæÂÂÃ¥ÂÂå¿Â
é Âå° <code>alert(http_request.responseText);</code> æÂ¹æÂÂéÂÂ樣@| |
<pre> | <pre> | ||
| 行 192: | 行 193: | ||
</pre> | </pre> | ||
| − | + | éÂÂ樣ä¸Âä¾ÂæÂÂÃ¥ÂÂ便å¯åÂÂå¾ <code>responseXML</code> æÂÂå³åÂÂç <code>XMLDocument</code> ç©件ï¼ÂèÂÂå¾Â以 DOM ç¸éÂÂçÂÂæÂ¹æ³ÂÃ¥ÂÂç¨ XML æÂÂä»¶åÂ
§å®¹ãÂÂä½ å¯以åÂÂè [http://www.w3clubs.com/mozdev/test.xml<code>test.xml</code> çÂÂÃ¥ÂÂå§Â碼] 以åÂÂä¿®æÂ¹éÂÂå¾ÂçÂÂ[http://www.w3clubs.com/mozdev/httprequest_test_xml.html 測試ç¨Âå¼Â]ã | |
| − | + | Ã¥Â
¶ä»Âè DOM ç¸éÂÂçÂÂæÂ¹æ³Âï¼Âè«ÂÃ¥ÂÂè [http://www.mozilla.org/docs/dom/ Mozilla DOM] æÂÂä»¶ã | |
<div style="display:none;"> | <div style="display:none;"> | ||
| − | [[{{literal2|=Category: | + | [[{{literal2|=Category:æÂÂä»¶å°Âæ¡Â|æÂÂä»¶å°Âæ¡Â=}}|{{literal2|={{PAGENAME}}|æÂÂä»¶å°Âæ¡Â=}}]] |
[[{{literal2|=Category:{{{4}}}|{{{4}}}=}}|{{literal2|={{PAGENAME}}|{{{4}}}=}}]] | [[{{literal2|=Category:{{{4}}}|{{{4}}}=}}|{{literal2|={{PAGENAME}}|{{{4}}}=}}]] | ||
[[{{literal2|=Category:{{{5}}}|{{{5}}}=}}|{{literal2|={{PAGENAME}}|{{{5}}}=}}]] | [[{{literal2|=Category:{{{5}}}|{{{5}}}=}}|{{literal2|={{PAGENAME}}|{{{5}}}=}}]] | ||
| 行 203: | 行 204: | ||
</div> | </div> | ||
| − | <div class="page-nav"><b> | + | <div class="page-nav"><b>â§è¿ÂÃ¥ÂÂä¸Âä¸Âé Â: </b>[[éÂÂç¼人塿ÂÂ件主é Â]]</div> |
於 2009年1月9日 (五) 08:35 的修訂
movie coloring pages james newman videogames jeux video.com panasonic 3ccd video cameras susan selles movie aguilera photo shoot video extreme ops movie cast second x file movie indianmoviesonline prodigy breathe music video
éÂÂç¯ÂæÂÂ章說æÂ AJAX ç¸éÂÂæÂÂè¡ÂçÂÂåºç¤Âï¼Â並æÂÂä¾Â實ä¾Âä¾ÂæÂ¨ä¸ÂæÂÂãÂÂ
內容大綱
- 1 第ä¸ÂæÂÂ¥ â 說è²ãÂÂè«Âã ï¼ÂÃ¥ÂÂ稱çºãÂÂæÂÂ麼ç¼åº XMLHttpRequestãÂÂï¼Â
- 2 第äºÂæÂÂ¥ â ãÂÂå°±ä¸Âå©ï¼ÂãÂÂï¼ÂÃ¥ÂÂ稱çºãÂÂèÂÂçÂÂ伺æÂÂå¨å³åÂÂçÂÂè³ÂæÂÂãÂÂï¼Â
- 3 第ä¸ÂæÂÂ¥ - è¬äºÂ俱å - ç°¡å®ç¯Âä¾Â
- 4 第åÂÂæÂÂ¥ â ãÂÂX æªÂæ¡ÂãÂÂï¼ÂÃ¥ÂÂ稱çºãÂÂèÂÂç XML Ã¥ÂÂæÂÂå¼ãÂÂï¼Â
第ä¸ÂæÂÂ¥ â 說è²ãÂÂè«Âã ï¼ÂÃ¥ÂÂ稱çºãÂÂæÂÂ麼ç¼åº XMLHttpRequestãÂÂï¼Â
çºäºÂç¨ JavaScript å°Â伺æÂÂå¨ç¼é HTTP è¦Âæ±Âï¼Âå¿Â
é ÂÃ¥Â
Â以ç¸éÂÂçÂÂé¡Âå¥ï¼Âclassï¼Â製åº實é«Âï¼Âinstanceï¼ÂãÂÂInternet Explorer é¦ÂÃ¥Â
Â以 ActiveX ç©件æÂ¹å¼ÂæÂÂä¾ XMLHTTP é¡Âå¥ï¼Âè MozillaãÂÂSafari Ã¥ÂÂÃ¥Â
¶ä»ÂçÂÂ覽å¨åÂÂé¨å¾Â以 XMLHttpRequest é¡Âå¥æÂ¯æÂ´æÂ¤ ActiveX ç©件ä¸ÂçÂÂé¡Âå¥åÂÂ屬æÂ§ãÂÂ
å æÂ¤ï¼Âå¦ÂæÂÂæÂ³è·¨çÂÂ覽å¨ï¼Âé£麼å¯以éÂÂ麼寫ï¼Â
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
http_request = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
(ç±æÂ¼éÂÂ段ç¨Âå¼Âå ä¾Â說æÂÂï¼ÂæÂÂ以æÂ¯æÂ¡æÂÂç°¡æÂ¹å¼Â寫åºãÂÂæÂ¾ÂÂ第ä¸ÂæÂ¥ä¸ÂæÂÂå¦ä¸Â種æÂÂÃ¥ÂÂæ¯Âè¼Â常ç¨çÂÂ寫æ³ÂãÂÂ)
æÂÂäºÂçÂÂæÂÂ Mozilla çÂÂ覽å¨å¨伺æÂÂå¨éÂÂÃ¥ÂÂçÂÂè³ÂæÂÂæÂªå« XML mime-type æªÂé Âï¼Âheaderï¼ÂæÂÂæÂÂåºé¯ãÂÂçºäºÂé¿åÂ
ÂéÂÂÃ¥ÂÂÃ¥ÂÂé¡Âï¼Âä½ å¯以ç¨ä¸ÂÃ¥ÂÂæÂ¹æ³Âè¦Â寫伺æÂÂå¨å³åÂÂçÂÂæªÂé Âï¼Â以åÂ
Âå³åÂÂçÂÂä¸ÂæÂ¯ text/xmlãÂÂ
http_request = new XMLHttpRequest();
http_request.overrideMimeType('text/xml');
æÂ¥ä¸Âä¾ÂæÂ¯è¦Â決å®Â伺æÂÂå¨å³åÂÂè³ÂæÂÂå¾ÂçÂÂèÂÂçÂÂæÂ¹å¼Âï¼ÂæÂ¤æÂÂä½ åªè¦Â以 onreadystatechange éÂÂÃ¥ÂÂ屬æÂ§æÂÂæÂÂè¦ÂèÂÂçÂÂå³åÂÂå¼ç JavaScript å½å¼ÂÃ¥ÂÂ稱å³å¯ï¼Âä¾Âå¦Âï¼Â
http_request.onreadystatechange = nameOfTheFunction;
注æÂÂï¼ÂæÂÂå®ÂçÂÂå½å¼ÂÃ¥ÂÂ稱å¾Âä¸Âå æÂÂÂä¹Âæ²ÂæÂÂÃ¥ÂÂæÂ¸ãÂÂé¤äºÂæÂÂå®Âå½å¼ÂÃ¥ÂÂ稱å¤Âï¼Âä½ ä¹Âè½ç¨ Javascript 峿ÂÂå®Â義å½å¼ÂçÂÂæÂ¹æ³Âä¾Âå®Âä¸ÂÃ¥ÂÂæÂ°çÂÂèÂÂçÂÂå½å¼Âï¼Âå¦Âä¸Âï¼Â
http_request.onreadystatechange = function(){
// Ã¥ÂÂäºÂäºÂ
};
決å®ÂèÂÂçÂÂæÂ¹å¼Âä¹Âå¾Âä½ å¾Â確實ç¼åº requestï¼ÂæÂ¤æÂÂéÂÂå«ç¨ HTTP request é¡Âå¥ç open() å send() æÂ¹æ³Âï¼Âå¦Âä¸Âï¼Â
http_request.open('GET', 'http://www.example.org/some.file', true);
http_request.send(null);
open()çÂÂ第ä¸ÂÃ¥ÂÂÃ¥ÂÂæÂ¸æÂ¯ HTTP request çÂÂæÂ¹æ³Âï¼Âä¹Âå°±æÂ¯å¾ GETãÂÂPOSTãÂÂHEAD ä¸ÂæÂÂä¸Â使ç¨ï¼Â亦å¯ç¨你主æ©Âä¸ÂæÂ¯æÂ´çÂÂæÂ¹å¼ÂãÂÂçºéµ循 HTTP æ¨ÂæºÂï¼Âè«Âè¨Âå¾ÂéÂÂäºÂæÂ¹æ³Âé½æÂ¯å¤§å¯«ï¼Âä¸Âç¶æÂÂçÂÂçÂÂ覽å¨ï¼Â妠Firefoxï¼ÂæÂÂ許ä¸ÂæÂÂçÂÂä½ ãÂÂå ¶ä» HTTP request å¯以æÂ¯æÂ´çÂÂæÂ¹æ³ÂÃ¥ÂÂ表è«ÂÃ¥ÂÂè W3C è¦Âæ ¼æÂ¸ãÂÂ- 第äºÂÃ¥ÂÂÃ¥ÂÂæÂ¸æÂ¯ç®樠URLãÂÂåºæÂ¼å®ÂÃ¥Â
¨èÂÂéÂÂï¼Âä½ ä¸Âè½å«ç¨åÂÂç¶²åÂÂ以å¤ÂçÂÂç¶²é ÂãÂÂå¦ÂæÂÂç¶²åÂÂä¸ÂÃ¥ÂÂï¼ÂÃ¥ÂÂå«ç¨
open()æÂÂæÂÂåºç¾ãÂÂæ¬ÂéÂÂä¸Âè¶³ï¼ÂæÂÂçµÂÃ¥ÂÂÃ¥ÂÂãÂÂé£é¡ÂçÂÂé¯誤ãÂÂéÂÂ常大夥æÂÂç¯çÂÂé¯誤å¤Âçºå¨ domain.tld ç¶²çÂÂç¶²ç«Âä¸Âå¼å« www.domain.tld ä¸ÂçÂÂç¶²é Âï¼Âå æÂ¯ä¸Âé»Âé»Âå·®åÂ¥é½ä¸Âè¡Âã - 第ä¸ÂÃ¥ÂÂÃ¥ÂÂæÂ¸æ±ºå®ÂæÂ¤ request æÂ¯å¦ä¸ÂÃ¥ÂÂæÂ¥é²è¡Âï¼Âå¦ÂæÂÂè¨Âå®Âçº
TRUEÃ¥ÂÂå³使伺æÂÂå¨å°ÂæÂªå³åÂÂè³ÂæÂÂä¹ÂæÂÂç¹¼çºÂå·è¡Âå ¶é¤ÂçÂÂç¨Âå¼Âï¼ÂéÂÂä¹Âå°±æÂ¯ AJAX ä¸Â第ä¸Âå A 代表çÂÂæÂÂ義ãÂÂ
send() çÂÂÃ¥ÂÂæÂ¸å¨以 POST ç¼åº request æÂÂå¯以æÂ¯ä»»ä½ÂæÂ³å³給伺æÂÂå¨çÂÂæÂ±è¥¿ï¼ÂèÂÂè³ÂæÂÂÃ¥ÂÂ以æÂ¥è©¢åÂÂ串çÂÂæÂ¹å¼ÂÃ¥ÂÂåºï¼Âä¾Âå¦Âï¼Â
name=value&anothername=othervalue&so=on
ä¸ÂéÂÂå¦ÂæÂÂä½ æÂ³è¦Â以 POST æÂ¹å¼Âå³éÂÂè³ÂæÂÂï¼ÂÃ¥ÂÂå¿ é Âå Âå° MIME Ã¥ÂÂæ ÂæÂ¹å¥½ï¼Âå¦Âä¸Âï¼Â
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
å¦åÂÂ伺æÂÂå¨就ä¸ÂæÂÂçÂÂä½ å³éÂÂä¾ÂçÂÂè³ÂæÂÂäºÂãÂÂ
第äºÂæÂÂ¥ â ãÂÂå°±ä¸Âå©ï¼ÂãÂÂï¼ÂÃ¥ÂÂ稱çºãÂÂèÂÂçÂÂ伺æÂÂå¨å³åÂÂçÂÂè³ÂæÂÂãÂÂï¼Â
å³åº request æÂÂå¿ é ÂæÂÂä¾ÂèÂÂçÂÂå³åÂÂå¼çÂÂå½å¼ÂÃ¥ÂÂ稱ãÂÂ
http_request.onreadystatechange = nameOfTheFunction;
é£麼ä¾ÂçÂÂçÂÂéÂÂÃ¥ÂÂå½å¼Â該åÂÂäºÂä»Â麼ãÂÂé¦Âå Âï¼Âå®Âå¿ é Â檢æÂÂ¥ request ç®åÂÂçÂÂçÂÂæ Âï¼Âå¦ÂæÂÂçÂÂæ Âå¼çº 4 代表伺æÂÂå¨已ç¶Âå³åÂÂæÂÂæÂÂè³Âè¨ÂäºÂï¼Â便å¯以éÂÂå§Âè§£æÂÂæÂÂå¾Âè³Âè¨ÂãÂÂ
if (http_request.readyState == 4) {
// ä¸Âå ok, ç¹¼çºÂè§£æÂÂ
} else {
// éÂÂæ²Âå®ÂæÂÂ
}
readyState æÂÂæÂÂå¯è½çÂÂå¼å¦Âä¸Âï¼Â
- 0 (éÂÂæ²ÂéÂÂå§Â)
- 1 (è®ÂÃ¥ÂÂä¸Â)
- 2 (å·²è®ÂÃ¥ÂÂ)
- 3 (è³Âè¨Â交æÂÂä¸Â)
- 4 (ä¸ÂÃ¥ÂÂå®ÂæÂÂ)
(è³ÂæÂÂä¾ÂæºÂ: MSDN)
æÂ¥ä¸Âä¾Âè¦Â檢æÂ¥ä¼ºæÂÂå¨å³åÂÂç HTTP çÂÂæÂ
Â碼ãÂÂæÂÂæÂÂçÂÂæÂ
Â碼åÂÂ表å¯æÂ¼ W3C ç¶²ç«Âä¸ÂæÂ¥å°ï¼Âä½ÂæÂÂÃ¥ÂÂè¦Â管çÂÂæÂ¯ 200 OK éÂÂ種çÂÂæÂ
ÂãÂÂ
if (http_request.status == 200) {
// è¬äºÂÃ¥Â
·åÂÂ
} else {
// ä¼¼ä¹ÂæÂÂé»ÂÃ¥ÂÂé¡Âï¼ÂæÂÂ許伺æÂÂå¨å³åÂÂ亠404 (æÂ¥ç¡æÂ¤é Â) æÂÂèÂÂ
500 (Ã¥Â
§é¨é¯誤) ä»Â麼çÂÂ
}
檢æÂ¥å³åÂÂç HTTP çÂÂæ Â碼å¾Âï¼Âè¦ÂæÂÂ麼èÂÂçÂÂå³åÂÂçÂÂè³ÂæÂÂå°±ç±你決å®ÂäºÂãÂÂæÂÂ堩種åÂÂÃ¥ÂÂè³ÂæÂÂçÂÂæÂ¹å¼Âï¼Â
http_request.responseTextâ éÂÂ樣æÂÂæÂÂå³åÂÂå¼ç¶åÂÂ串ç¨http_request.responseXMLâ éÂÂ樣æÂÂæÂÂå³åÂÂå¼è¦ÂçºXMLDocumentç©件ï¼ÂèÂÂå¾Âå¯ç¨ JavaScript DOM ç¸éÂÂå½å¼ÂèÂÂçÂÂ
第ä¸ÂæÂÂ¥ - è¬äºÂ俱å - ç°¡å®ç¯Âä¾Â
好ï¼ÂæÂ¥èÂÂå°±åÂÂä¸Â次簡å®ç HTTP ç¯Âä¾Âï¼Âæ¼Â示æÂ¹æÂÂçÂÂÃ¥ÂÂé Â
æÂÂå·§ãÂÂéÂÂ段 JavaScript æÂÂÃ¥ÂÂ伺æÂÂå¨è¦Âä¸Â份裡é ÂæÂÂãÂÂI'm a test.ãÂÂÃ¥ÂÂ樣ç HTML æÂÂä»¶(test.html)ï¼ÂèÂÂå¾Â以 alert() å°ÂæÂÂä»¶åÂ
§å®¹åÂÂåºãÂÂ
<script type="text/javascript" language="javascript">
var http_request = false;
function makeRequest(url) {
http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
http_request.onreadystatechange = alertContents;
http_request.open('GET', url, true);
http_request.send(null);
}
function alertContents() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
alert(http_request.responseText);
} else {
alert('There was a problem with the request.');
}
}
}
</script>
<span
style="cursor: pointer; text-decoration: underline"
onclick="makeRequest('test.html')">
Make a request
</span>
å¨æÂ¤ç¯Âä¾Âä¸Âï¼Â
- é¦Âå Â使ç¨è æÂÂä¸ÂãÂÂMake a requestãÂÂ
- éÂÂ麼ä¸Âä¾Âå°±æÂÂå¼å«
makeRequest()å½å¼Âï¼Â亦å³堥åÂÂæÂ¸å¼test.html(ä¹Âå°±æÂ¯é£份 HTML æªÂçÂÂÃ¥ÂÂ稱ï¼ÂæÂ¾å¨åÂÂç®éÂÂä¸Â) - æÂ¥èÂÂç¼åº requestï¼ÂèÂÂå¾ÂæÂÂå°Â主å°Âæ¬Â交給
onreadystatechangeæÂÂå®ÂçÂÂalertContents()å½张alertContents()檢æÂ¥åÂÂæÂÂæÂ¯å¦æÂ£å¸¸ï¼ÂèÂÂå¾Â以alert()å°Âtest.htmlçÂÂ堧容åÂÂåº
ä½ å¯以ç±æÂ¤æ¸¬è©¦æÂ¬ä¾Âï¼Âä¹Âå¯以åÂÂèÂÂ測試æªÂæ¡ÂãÂÂ
第åÂÂæÂÂ¥ â ãÂÂX æªÂæ¡ÂãÂÂï¼ÂÃ¥ÂÂ稱çºãÂÂèÂÂç XML Ã¥ÂÂæÂÂå¼ãÂÂï¼Â
Ã¥ÂÂé¢çÂÂä¾ÂÃ¥ÂÂä¸Âï¼Âå¨æÂ¶å° HTTP å³åÂÂå¼å¾ÂæÂÂÃ¥ÂÂ以ç©件ç reponseText 屬æÂ§ä½¿ç¨ test.html æªÂæ¡ÂçÂÂÃ¥Â
§å®¹ï¼ÂæÂ¥èÂÂä¾Â試試 responseXML 屬æÂ§çÂÂæÂ¹æ³ÂãÂÂ
é¦ÂÃ¥Â
Âï¼ÂæÂÂÃ¥ÂÂå¾ÂÃ¥ÂÂÃ¥ÂÂæ ¼å¼ÂæÂ£ç¢ºç XML æÂÂä»¶ï¼Â以便ç¨Âå¾ÂÃ¥ÂÂç¨ãÂÂæÂ¤æªÂÃ¥ÂÂå test.xmlï¼ÂÃ¥Â
§å®¹å¦Âä¸Âï¼Â
<?xml version="1.0" ?>
<root>
I'm a test.
</root>
å¨ç¨Âå¼Âä¸Âï¼ÂæÂÂÃ¥ÂÂå«ç¨æªÂæ¡ÂçÂÂå°æÂ¹åªé ÂçÂ¥äºÂä¿®æÂ¹å¦Âä¸Âï¼Â
...
onclick="makeRequest('test.xml')">
...
æÂ¥èÂÂå¨ alertContents() ä¸Âï¼ÂæÂÂÃ¥ÂÂå¿Â
é Âå° alert(http_request.responseText); æÂ¹æÂÂéÂÂ樣ï¼Â
var xmldoc = http_request.responseXML;
var root_node = xmldoc.getElementsByTagName('root').item(0);
alert(root_node.firstChild.data);
éÂÂ樣ä¸Âä¾ÂæÂÂÃ¥ÂÂ便å¯åÂÂå¾ responseXML æÂÂå³åÂÂç XMLDocument ç©件ï¼ÂèÂÂå¾Â以 DOM ç¸éÂÂçÂÂæÂ¹æ³ÂÃ¥ÂÂç¨ XML æÂÂä»¶åÂ
§å®¹ãÂÂä½ å¯以åÂÂè test.xml çÂÂÃ¥ÂÂå§Â碼 以åÂÂä¿®æÂ¹éÂÂå¾ÂçÂÂ測試ç¨Âå¼ÂãÂÂ
å ¶ä»Âè DOM ç¸éÂÂçÂÂæÂ¹æ³Âï¼Âè«ÂÃ¥ÂÂè Mozilla DOM æÂÂä»¶ãÂÂ
