¡¡¡¡XMLHttpRequest¶ÔÏóÊǵ±½ñËùÓÐAJAXºÍWeb 2.0Ó¦ÓóÌÐòµÄ¼¼Êõ»ù´¡¡£¾¡¹ÜÈí¼þ¾­ÏúÉ̺ͿªÔ´ÉçÍÅÏÖÔÚ¶¼ÔÚÌṩ¸÷ÖÖAJAX¿ò¼ÜÒÔ½øÒ»²½¼ò»¯XMLHttpRequest¶ÔÏóµÄʹÓ㻵«ÊÇ£¬ÎÒÃÇÈÔÈ»ºÜÓбØÒªÀí½âÕâ¸ö¶ÔÏóµÄÏêϸ¹¤×÷»úÖÆ¡£

¡¡¡¡Ò»¡¢ ÒýÑÔ

¡¡¡¡Òì²½JavaScriptÓëXML(AJAX)ÊÇÒ»¸öרÓÃÊõÓÓÃÓÚʵÏÖÔÚ¿Í»§¶Ë½Å±¾Óë·þÎñÆ÷Ö®¼äµÄÊý¾Ý½»»¥¹ý³Ì¡£ÕâÒ»¼¼ÊõµÄÓŵãÔÚÓÚ£¬ËüÏò¿ª·¢ÕßÌṩÁËÒ»ÖÖ´ÓWeb·þÎñÆ÷¼ìË÷Êý¾Ý¶ø²»±Ø°ÑÓû§µ±Ç°ÕýÔÚ¹Û²ìµÄÒ³Ãæ»ØÀ¡¸ø·þÎñÆ÷¡£ÓëÏÖ´úä¯ÀÀÆ÷µÄͨ¹ý´æÈ¡ä¯ÀÀÆ÷DOM½á¹¹µÄ±à³Ì´úÂë(JavaScript)¶¯Ì¬µØ¸Ä±ä±»ÏÔʾÄÚÈݵÄÖ§³ÖÏàÅäºÏ£¬AJAXÈÿª·¢ÕßÔÚä¯ÀÀÆ÷¶Ë¸üб»ÏÔʾµÄHTMLÄÚÈݶø²»±ØË¢ÐÂÒ³Ãæ¡£»»¾ä»°Ëµ£¬AJAX¿ÉÒÔʹ»ùÓÚä¯ÀÀÆ÷µÄÓ¦ÓóÌÐò¸ü¾ß½»»¥ÐÔ¶øÇÒ¸üÀàËÆ´«Í³ÐÍ×ÀÃæÓ¦ÓóÌÐò¡£

¡¡¡¡GoogleµÄGmailºÍOutlook Express¾ÍÊÇÁ½¸öʹÓÃAJAX¼¼ÊõµÄÎÒÃÇËùÊìϤµÄÀý×Ó¡£¶øÇÒ£¬AJAX¿ÉÒÔÓÃÓÚÈκοͻ§¶Ë½Å±¾ÓïÑÔÖУ¬Õâ°üÀ¨JavaScript£¬JscriptºÍVBScript¡£

¡¡¡¡AJAXÀûÓÃÒ»¸ö¹¹½¨µ½ËùÓÐÏÖ´úä¯ÀÀÆ÷ÄÚ²¿µÄ¶ÔÏó-XMLHttpRequest-À´ÊµÏÖ·¢ËͺͽÓÊÕHTTPÇëÇóÓëÏìÓ¦ÐÅÏ¢¡£Ò»¸ö¾­ÓÉXMLHttpRequest¶ÔÏó·¢Ë͵ÄHTTPÇëÇó²¢²»ÒªÇóÒ³ÃæÖÐÓµÓлò»Ø¼ÄÒ»¸ö£¼form£¾ÔªËØ¡£AJAXÖеÄ"A"´ú±íÁË"Òì²½"£¬ÕâÒâζ×ÅXMLHttpRequest¶ÔÏóµÄsend()·½·¨¿ÉÒÔÁ¢¼´·µ»Ø£¬´Ó¶øÈÃWebÒ³ÃæÉÏµÄÆäËüHTML/JavaScript¼ÌÐøÆää¯ÀÀÆ÷¶Ë´¦Àí¶øÓÉ·þÎñÆ÷´¦ÀíHTTPÇëÇó²¢·¢ËÍÏìÓ¦¡£¾¡¹ÜȱʡÇé¿öÏÂÇëÇóÊÇÒì²½½øÐе쬵«ÊÇ£¬Äã¿ÉÒÔÑ¡Ôñ·¢ËÍͬ²½ÇëÇó£¬Õ⽫»áÔÝÍ£ÆäËüWebÒ³ÃæµÄ´¦Àí£¬Ö±µ½¸ÃÒ³Ãæ½ÓÊÕµ½·þÎñÆ÷µÄÏìӦΪֹ¡£

¡¡¡¡Î¢ÈíÔÚÆäInternet Explorer(IE) 5ÖÐ×÷Ϊһ¸öActiveX¶ÔÏóÐÎʽÒýÈëÁËXMLHttpRequest¶ÔÏ󡣯äËûµÄÈÏʶµ½ÕâÒ»¶ÔÏóÖØÒªÐÔµÄä¯ÀÀÆ÷ÖÆÔìÉÌÒ²¶¼·×·×ÔÚËûÃǵÄä¯ÀÀÆ÷ÄÚʵÏÖÁËXMLHttpRequest¶ÔÏ󣬵«ÊÇ×÷Ϊһ¸ö±¾µØJavaScript¶ÔÏó¶ø²»ÊÇ×÷Ϊһ¸öActiveX¶ÔÏóʵÏÖ¡£¶øÈç½ñ£¬ÔÚÈÏʶµ½ÊµÏÖÕâÒ»ÀàÐ͵ļÛÖµ¼°°²È«ÐÔÌØÕ÷Ö®ºó£¬Î¢ÈíÒѾ­ÔÚÆäIE 7ÖаÑXMLHttpRequestʵÏÖΪһ¸ö´°¿Ú¶ÔÏóÊôÐÔ¡£ÐÒÔ˵ÄÊÇ£¬¾¡¹ÜÆäʵÏÖ(Òò¶øÒ²Ó°Ïìµ½µ÷Ó÷½Ê½)ϸ½Ú²»Í¬£¬µ«ÊÇ£¬ËùÓеÄä¯ÀÀÆ÷ʵÏÖ¶¼¾ßÓÐÀàËÆµÄ¹¦ÄÜ£¬²¢ÇÒʵÖÊÉÏÊÇÏàͬ·½·¨¡£Ä¿Ç°£¬W3C×éÖ¯ÕýÔÚŬÁ¦½øÐÐXMLHttpRequest¶ÔÏóµÄ±ê×¼»¯£¬²¢ÇÒÒѾ­·¢ÐÐÁËÓйظÃW3C¹æ·¶µÄÒ»¸ö²Ý°¸¡£

¡¡¡¡±¾ÎĽ«¶ÔXMLHttpRequest¶ÔÏóAPI½øÐÐÏêϸÌÖÂÛ£¬²¢½«½âÊÍÆäËùÓеÄÊôÐԺͷ½·¨¡£

¡¡¡¡¶þ¡¢ XMLHttpRequest¶ÔÏóµÄÊôÐÔºÍʼþ

¡¡¡¡XMLHttpRequest¶ÔÏó±©Â¶¸÷ÖÖÊôÐÔ¡¢·½·¨ºÍʼþÒÔ±ãÓڽű¾´¦ÀíºÍ¿ØÖÆHTTPÇëÇóÓëÏìÓ¦¡£ÏÂÃæ£¬ÎÒÃǽ«¶Ô´ËÕ¹¿ªÏêϸµÄÌÖÂÛ¡£
readyStateÊôÐÔ

¡¡¡¡µ±XMLHttpRequest¶ÔÏó°ÑÒ»¸öHTTPÇëÇó·¢Ë͵½·þÎñÆ÷ʱ½«¾­ÀúÈô¸ÉÖÖ״̬£ºÒ»Ö±µÈ´ýÖ±µ½ÇëÇó±»´¦Àí£»È»ºó£¬Ëü²Å½ÓÊÕÒ»¸öÏìÓ¦¡£ÕâÑùÒÔÀ´£¬½Å±¾²ÅÕýÈ·ÏìÓ¦¸÷ÖÖ״̬-XMLHttpRequest¶ÔÏó±©Â¶Ò»¸öÃèÊö¶ÔÏóµÄµ±Ç°×´Ì¬µÄreadyStateÊôÐÔ£¬Èç±í¸ñ1Ëùʾ¡£

¡¡¡¡±í¸ñ1.XMLHttpRequest¶ÔÏóµÄReadyStateÊôÐÔÖµÁÐ±í¡£

ReadyStateȡֵÃèÊö
0
ÃèÊöÒ»ÖÖ"δ³õʼ»¯"״̬£»´Ëʱ£¬ÒѾ­´´½¨Ò»¸öXMLHttpRequest¶ÔÏ󣬵«ÊÇ»¹Ã»Óгõʼ»¯¡£
1
ÃèÊöÒ»ÖÖ"·¢ËÍ"״̬£»´Ëʱ£¬´úÂëÒѾ­µ÷ÓÃÁËXMLHttpRequest open()·½·¨²¢ÇÒXMLHttpRequestÒѾ­×¼±¸ºÃ°ÑÒ»¸öÇëÇó·¢Ë͵½·þÎñÆ÷¡£
2
ÃèÊöÒ»ÖÖ"·¢ËÍ"״̬£»´Ëʱ£¬ÒѾ­Í¨¹ýsend()·½·¨°ÑÒ»¸öÇëÇó·¢Ë͵½·þÎñÆ÷¶Ë£¬µ«ÊÇ»¹Ã»ÓÐÊÕµ½Ò»¸öÏìÓ¦¡£
3
ÃèÊöÒ»ÖÖ"ÕýÔÚ½ÓÊÕ"״̬£»´Ëʱ£¬ÒѾ­½ÓÊÕµ½HTTPÏìӦͷ²¿ÐÅÏ¢£¬µ«ÊÇÏûÏ¢Ì岿·Ö»¹Ã»ÓÐÍêÈ«½ÓÊÕ½áÊø¡£
4
ÃèÊöÒ»ÖÖ"ÒѼÓÔØ"״̬£»´Ëʱ£¬ÏìÓ¦ÒѾ­±»ÍêÈ«½ÓÊÕ¡£


¡¡¡¡onreadystatechangeʼþ

¡¡¡¡ÎÞÂÛreadyStateÖµºÎʱ·¢Éú¸Ä±ä£¬XMLHttpRequest¶ÔÏ󶼻ἤ·¢Ò»¸öreadystatechangeʼþ¡£ÆäÖУ¬onreadystatechangeÊôÐÔ½ÓÊÕÒ»¸öEventListenerÖµ-Ïò¸Ã·½·¨Ö¸Ê¾ÎÞÂÛreadyStateÖµºÎʱ·¢Éú¸Ä±ä£¬¸Ã¶ÔÏó¶¼½«¼¤»î¡£

¡¡¡¡responseTextÊôÐÔ

¡¡¡¡Õâ¸öresponseTextÊôÐÔ°üº¬¿Í»§¶Ë½ÓÊÕµ½µÄHTTPÏìÓ¦µÄÎı¾ÄÚÈÝ¡£µ±readyStateֵΪ0¡¢1»ò2ʱ£¬responseText°üº¬Ò»¸ö¿Õ×Ö·û´®¡£µ±readyStateֵΪ3(ÕýÔÚ½ÓÊÕ)ʱ£¬ÏìÓ¦Öаüº¬¿Í»§¶Ë»¹Î´Íê³ÉµÄÏìÓ¦ÐÅÏ¢¡£µ±readyStateΪ4(ÒѼÓÔØ)ʱ£¬¸ÃresponseText°üº¬ÍêÕûµÄÏìÓ¦ÐÅÏ¢¡£

¡¡¡¡responseXMLÊôÐÔ

¡¡¡¡´ËresponseXMLÊôÐÔÓÃÓÚµ±½ÓÊÕµ½ÍêÕûµÄHTTPÏìӦʱ(readyStateΪ4)ÃèÊöXMLÏìÓ¦£»´Ëʱ£¬Content-TypeÍ·²¿Ö¸¶¨MIME(ýÌå)ÀàÐÍΪtext/xml£¬application/xml»òÒÔ+xml½áβ¡£Èç¹ûContent-TypeÍ·²¿²¢²»°üº¬ÕâЩýÌåÀàÐÍÖ®Ò»£¬ÄÇôresponseXMLµÄֵΪnull¡£ÎÞÂÛºÎʱ£¬Ö»ÒªreadyStateÖµ²»Îª4£¬ÄÇô¸ÃresponseXMLµÄֵҲΪnull¡£

¡¡¡¡Æäʵ£¬Õâ¸öresponseXMLÊôÐÔÖµÊÇÒ»¸öÎĵµ½Ó¿ÚÀàÐ͵ĶÔÏó£¬ÓÃÀ´ÃèÊö±»·ÖÎöµÄÎĵµ¡£Èç¹ûÎĵµ²»Äܱ»·ÖÎö(ÀýÈ磬Èç¹ûÎĵµ²»ÊÇÁ¼¹¹µÄ»ò²»Ö§³ÖÎĵµÏàÓ¦µÄ×Ö·û±àÂë)£¬ÄÇôresponseXMLµÄÖµ½«Îªnull¡£

¡¡¡¡statusÊôÐÔ

¡¡¡¡Õâ¸östatusÊôÐÔÃèÊöÁËHTTP״̬´úÂ룬¶øÇÒÆäÀàÐÍΪshort¡£¶øÇÒ£¬½öµ±readyStateֵΪ3(ÕýÔÚ½ÓÊÕÖÐ)»ò4(ÒѼÓÔØ)ʱ£¬Õâ¸östatusÊôÐԲſÉÓᣵ±readyStateµÄֵСÓÚ3ʱÊÔͼ´æÈ¡statusµÄÖµ½«Òý·¢Ò»¸öÒì³£¡£

¡¡¡¡statusTextÊôÐÔ

¡¡¡¡Õâ¸östatusTextÊôÐÔÃèÊöÁËHTTP״̬´úÂëÎı¾£»²¢ÇÒ½öµ±readyStateֵΪ3»ò4²Å¿ÉÓᣵ±readyStateΪÆäËüֵʱÊÔͼ´æÈ¡statusTextÊôÐÔ½«Òý·¢Ò»¸öÒì³£¡£

¡¡¡¡Èý¡¢ XMLHttpRequest¶ÔÏóµÄ·½·¨

¡¡¡¡XMLHttpRequest¶ÔÏóÌṩÁ˸÷ÖÖ·½·¨ÓÃÓÚ³õʼ»¯ºÍ´¦ÀíHTTPÇëÇó£¬ÏÂÁн«Öð¸öÕ¹¿ªÏêϸÌÖÂÛ¡£

¡¡¡¡abort()·½·¨

¡¡¡¡Äã¿ÉÒÔʹÓÃÕâ¸öabort()·½·¨À´ÔÝÍ£ÓëÒ»¸öXMLHttpRequest¶ÔÏóÏàÁªÏµµÄHTTPÇëÇ󣬴Ӷø°Ñ¸Ã¶ÔÏó¸´Î»µ½Î´³õʼ»¯×´Ì¬¡£

¡¡¡¡open()·½·¨

¡¡¡¡ÄãÐèÒªµ÷ÓÃopen(DOMString method£¬DOMString uri£¬boolean async£¬DOMString username£¬DOMString password)·½·¨³õʼ»¯Ò»¸öXMLHttpRequest¶ÔÏ󡣯äÖУ¬method²ÎÊýÊDZØÐëÌṩµÄ-ÓÃÓÚÖ¸¶¨ÄãÏëÓÃÀ´·¢ËÍÇëÇóµÄHTTP·½·¨(GET£¬POST£¬PUT£¬DELETE»òHEAD)¡£ÎªÁ˰ÑÊý¾Ý·¢Ë͵½·þÎñÆ÷£¬Ó¦¸ÃʹÓÃPOST·½·¨£»ÎªÁË´Ó·þÎñÆ÷¶Ë¼ìË÷Êý¾Ý£¬Ó¦¸ÃʹÓÃGET·½·¨¡£ÁíÍ⣬uri²ÎÊýÓÃÓÚÖ¸¶¨XMLHttpRequest¶ÔÏó°ÑÇëÇó·¢Ë͵½µÄ·þÎñÆ÷ÏàÓ¦µÄURI¡£½èÖúÓÚwindow.document.baseURIÊôÐÔ£¬¸Ãuri±»½âÎöΪһ¸ö¾ø¶ÔµÄURI-»»¾ä»°Ëµ£¬Äã¿ÉÒÔʹÓÃÏà¶ÔµÄURI-Ëü½«Ê¹ÓÃÓëä¯ÀÀÆ÷½âÎöÏà¶ÔµÄURIÒ»ÑùµÄ·½Ê½±»½âÎö¡£async²ÎÊýÖ¸¶¨ÊÇ·ñÇëÇóÊÇÒì²½µÄ-ȱʡֵΪtrue¡£ÎªÁË·¢ËÍÒ»¸öͬ²½ÇëÇó£¬ÐèÒª°ÑÕâ¸ö²ÎÊýÉèÖÃΪfalse¡£¶ÔÓÚÒªÇóÈÏÖ¤µÄ·þÎñÆ÷£¬Äã¿ÉÒÔÌṩ¿ÉÑ¡µÄÓû§ÃûºÍ¿ÚÁî²ÎÊý¡£ÔÚµ÷ÓÃopen()·½·¨ºó£¬XMLHttpRequest¶ÔÏó°ÑËüµÄreadyStateÊôÐÔÉèÖÃΪ1(´ò¿ª)²¢ÇÒ°ÑresponseText¡¢responseXML¡¢statusºÍstatusTextÊôÐÔ¸´Î»µ½ËüÃǵijõʼֵ¡£ÁíÍ⣬Ëü»¹¸´Î»ÇëÇóÍ·²¿¡£×¢Ò⣬Èç¹ûÄãµ÷ÓÃopen()·½·¨²¢ÇÒ´ËʱreadyStateΪ4£¬ÔòXMLHttpRequest¶ÔÏ󽫸´Î»ÕâЩֵ¡£

¡¡¡¡send()·½·¨

¡¡¡¡ÔÚͨ¹ýµ÷ÓÃopen()·½·¨×¼±¸ºÃÒ»¸öÇëÇóÖ®ºó£¬ÄãÐèÒª°Ñ¸ÃÇëÇó·¢Ë͵½·þÎñÆ÷¡£½öµ±readyStateֵΪ1ʱ£¬Äã²Å¿ÉÒÔµ÷ÓÃsend()·½·¨£»·ñÔòµÄ»°£¬XMLHttpRequest¶ÔÏó½«Òý·¢Ò»¸öÒì³£¡£¸ÃÇëÇó±»Ê¹ÓÃÌṩ¸øopen()·½·¨µÄ²ÎÊý·¢Ë͵½·þÎñÆ÷¡£µ±async²ÎÊýΪtrueʱ£¬send()·½·¨Á¢¼´·µ»Ø£¬´Ó¶øÔÊÐíÆäËü¿Í»§¶Ë½Å±¾´¦Àí¼ÌÐø¡£ÔÚµ÷ÓÃsend()·½·¨ºó£¬XMLHttpRequest¶ÔÏó°ÑreadyStateµÄÖµÉèÖÃΪ2(·¢ËÍ)¡£µ±·þÎñÆ÷ÏìӦʱ£¬ÔÚ½ÓÊÕÏûÏ¢Ìå֮ǰ£¬Èç¹û´æÔÚÈκÎÏûÏ¢ÌåµÄ»°£¬XMLHttpRequest¶ÔÏ󽫰ÑreadyStateÉèÖÃΪ3(ÕýÔÚ½ÓÊÕÖÐ)¡£µ±ÇëÇóÍê³É¼ÓÔØÊ±£¬Ëü°ÑreadyStateÉèÖÃΪ4(ÒѼÓÔØ)¡£¶ÔÓÚÒ»¸öHEADÀàÐ͵ÄÇëÇó£¬Ëü½«ÔÚ°ÑreadyStateÖµÉèÖÃΪ3ºóÔÙÁ¢¼´°ÑËüÉèÖÃΪ4¡£

¡¡¡¡send()·½·¨Ê¹ÓÃÒ»¸ö¿ÉÑ¡µÄ²ÎÊý-¸Ã²ÎÊý¿ÉÒÔ°üº¬¿É±äÀàÐ͵ÄÊý¾Ý¡£µäÐ͵أ¬ÄãʹÓÃËü²¢Í¨¹ýPOST·½·¨°ÑÊý¾Ý·¢Ë͵½·þÎñÆ÷¡£ÁíÍ⣬Äã¿ÉÒÔÏÔʽµØÊ¹ÓÃnull²ÎÊýµ÷ÓÃsend()·½·¨£¬ÕâÓë²»ÓòÎÊýµ÷ÓÃËüÒ»Ñù¡£¶ÔÓÚ´ó¶àÊýÆäËüµÄÊý¾ÝÀàÐÍ£¬ÔÚµ÷ÓÃsend()·½·¨Ö®Ç°£¬Ó¦¸ÃʹÓÃsetRequestHeader()·½·¨(¼ûºóÃæµÄ½âÊÍ)ÏÈÉèÖÃContent-TypeÍ·²¿¡£Èç¹ûÔÚsend(data)·½·¨ÖеÄdata²ÎÊýµÄÀàÐÍΪDOMString£¬ÄÇô£¬Êý¾Ý½«±»±àÂëΪUTF-8¡£Èç¹ûÊý¾ÝÊÇDocumentÀàÐÍ£¬ÄÇô½«Ê¹ÓÃÓÉdata.xmlEncodingÖ¸¶¨µÄ±àÂë´®Ðл¯¸ÃÊý¾Ý¡£

¡¡¡¡setRequestHeader()·½·¨

¡¡¡¡¸ÃsetRequestHeader(DOMString header£¬DOMString value)·½·¨ÓÃÀ´ÉèÖÃÇëÇóµÄÍ·²¿ÐÅÏ¢¡£µ±readyStateֵΪ1ʱ£¬Äã¿ÉÒÔÔÚµ÷ÓÃopen()·½·¨ºóµ÷ÓÃÕâ¸ö·½·¨£»·ñÔò£¬Ä㽫µÃµ½Ò»¸öÒì³£¡£

¡¡¡¡getResponseHeader()·½·¨

¡¡¡¡getResponseHeader(DOMString header£¬value)·½·¨ÓÃÓÚ¼ìË÷ÏìÓ¦µÄÍ·²¿Öµ¡£½öµ±readyStateÖµÊÇ3»ò4(»»¾ä»°Ëµ£¬ÔÚÏìӦͷ²¿¿ÉÓÃÒÔºó)ʱ£¬²Å¿ÉÒÔµ÷ÓÃÕâ¸ö·½·¨£»·ñÔò£¬¸Ã·½·¨·µ»ØÒ»¸ö¿Õ×Ö·û´®¡£

¡¡¡¡getAllResponseHeaders()·½·¨

¡¡¡¡¸ÃgetAllResponseHeaders()·½·¨ÒÔÒ»¸ö×Ö·û´®ÐÎʽ·µ»ØËùÓеÄÏìӦͷ²¿£¨Ã¿Ò»¸öÍ·²¿Õ¼µ¥¶ÀµÄÒ»ÐУ©¡£Èç¹ûreadyStateµÄÖµ²»ÊÇ3»ò4£¬Ôò¸Ã·½·¨·µ»Ønull¡£

¡¡¡¡ËÄ¡¢ ·¢ËÍÇëÇó

¡¡¡¡ÔÚAJAXÖУ¬Ðí¶àʹÓÃXMLHttpRequestµÄÇëÇó¶¼ÊÇ´ÓÒ»¸öHTMLʼþ£¨ÀýÈçÒ»¸öµ÷ÓÃJavaScriptº¯ÊýµÄ°´Å¥µã»÷(onclick)»òÒ»¸ö°´¼ü(onkeypress)£©Öб»³õʼ»¯µÄ¡£AJAXÖ§³Ö°üÀ¨±íµ¥Ð£ÑéÔÚÄڵĸ÷ÖÖÓ¦ÓóÌÐò¡£ÓÐʱ£¬ÔÚÌî³ä±íµ¥µÄÆäËüÄÚÈÝ֮ǰҪÇóУÑéÒ»¸öΨһµÄ±íµ¥Óò¡£ÀýÈçÒªÇóʹÓÃÒ»¸öΨһµÄUserIDÀ´×¢²á±íµ¥¡£Èç¹û²»ÊÇʹÓÃAJAX¼¼ÊõÀ´Ð£ÑéÕâ¸öUserIDÓò£¬ÄÇôÕû¸ö±íµ¥¶¼±ØÐë±»Ìî³äºÍÌá½»¡£Èç¹û¸ÃUserID²»ÊÇÓÐЧµÄ£¬Õâ¸ö±íµ¥±ØÐë±»ÖØÐÂÌá½»¡£ÀýÈ磬һ¸öÏàÓ¦ÓÚÒ»¸öÒªÇó±ØÐëÔÚ·þÎñÆ÷¶Ë½øÐÐУÑéµÄCatalog IDµÄ±íµ¥Óò¿ÉÄܰ´ÏÂÁÐÐÎʽָ¶¨£º

£¼form name="validationForm" action="validateForm" method="post"£¾
£¼table£¾
¡¡£¼tr£¾£¼td£¾Catalog Id:£¼/td£¾
¡¡¡¡£¼td£¾
¡¡¡¡¡¡£¼input type="text" size="20" id="catalogId" name="catalogId" autocomplete="off" onkeyup="sendRequest()"£¾
¡¡¡¡£¼/td£¾
¡¡¡¡£¼td£¾£¼div id="validationMessage"£¾£¼/div£¾£¼/td£¾
¡¡£¼/tr£¾
£¼/table£¾£¼/form£¾

¡¡¡¡Ç°ÃæµÄHTMLʹÓÃvalidationMessage divÀ´ÏÔʾÏàÓ¦ÓÚÕâ¸öÊäÈëÓòCatalog IdµÄÒ»¸öУÑéÏûÏ¢¡£onkeyupʼþµ÷ÓÃÒ»¸öJavaScript sendRequest()º¯Êý¡£Õâ¸ösendRequest()º¯Êý´´½¨Ò»¸öXMLHttpRequest¶ÔÏó¡£´´½¨Ò»¸öXMLHttpRequest¶ÔÏóµÄ¹ý³ÌÒòä¯ÀÀÆ÷ʵÏֵIJ»Í¬¶øÓÐËùÇø±ð¡£Èç¹ûä¯ÀÀÆ÷Ö§³ÖXMLHttpRequest¶ÔÏó×÷Ϊһ¸ö´°¿ÚÊôÐÔ(ËùÓÐÆÕͨµÄä¯ÀÀÆ÷¶¼ÊÇÕâÑùµÄ£¬³ýÁËIE 5ºÍIE 6Ö®Íâ)£¬ÄÇô£¬´úÂë¿ÉÒÔµ÷ÓÃXMLHttpRequestµÄ¹¹ÔìÆ÷¡£Èç¹ûä¯ÀÀÆ÷°ÑXMLHttpRequest¶ÔÏóʵÏÖΪһ¸öActiveXObject¶ÔÏó(¾ÍÏóÔÚIE 5ºÍIE 6ÖÐÒ»Ñù)£¬ÄÇô£¬´úÂë¿ÉÒÔʹÓÃActiveXObjectµÄ¹¹ÔìÆ÷¡£ÏÂÃæµÄº¯Êý½«µ÷ÓÃÒ»¸öinit()º¯Êý£¬Ëü¸ºÔð¼ì²é²¢¾ö¶¨ÒªÊ¹ÓõÄÊʵ±µÄ´´½¨·½·¨-ÔÚ´´½¨ºÍ·µ»Ø¶ÔÏó֮ǰ¡£

£¼script type="text/javascript"£¾
function sendRequest(){
¡¡var xmlHttpReq=init();
¡¡function init(){
¡¡¡¡if (window.XMLHttpRequest) {
¡¡¡¡¡¡return new XMLHttpRequest();
¡¡¡¡}
¡¡else if (window.ActiveXObject) {
¡¡¡¡return new ActiveXObject("Microsoft.XMLHTTP");
¡¡}
}
£¼/script£¾

¡¡¡¡½ÓÏÂÀ´£¬ÄãÐèҪʹÓÃOpen()·½·¨³õʼ»¯XMLHttpRequest¶ÔÏó-Ö¸¶¨HTTP·½·¨ºÍҪʹÓõķþÎñÆ÷URL¡£

var catalogId=encodeURIComponent(document.getElementById("catalogId").value);
xmlHttpReq.open("GET"£¬ "validateForm?catalogId=" + catalogId£¬ true);

¡¡¡¡Ä¬ÈÏÇé¿öÏ£¬Ê¹ÓÃXMLHttpRequest·¢Ë͵ÄHTTPÇëÇóÊÇÒì²½½øÐе쬵«ÊÇÄã¿ÉÒÔÏÔʽµØ°Ñasync²ÎÊýÉèÖÃΪtrue£¬ÈçÉÏÃæËùչʾµÄ¡£
ÔÚÕâÖÖÇé¿öÏ£¬¶ÔURL validateFormµÄµ÷Óý«¼¤»î·þÎñÆ÷¶ËµÄÒ»¸öservlet£¬µ«ÊÇÄãÓ¦¸ÃÄܹ»×¢Òâµ½·þÎñÆ÷¶Ë¼¼Êõ²»ÊǸù±¾ÐԵģ»Êµ¼ÊÉÏ£¬¸ÃURL¿ÉÄÜÊÇÒ»¸öASP£¬ASP.NET»òPHPÒ³Ãæ»òÒ»¸öWeb·þÎñ-ÕâÎ޹ؽôÒª£¬Ö»Òª¸ÃÒ³ÃæÄܹ»·µ»ØÒ»¸öÏìÓ¦-ָʾCatalogIDÖµÊÇ·ñÊÇÓÐЧµÄ-¼´¿É¡£ÒòΪÄãÔÚ×÷Ò»¸öÒì²½µ÷Óã¬ËùÒÔÄãÐèҪע²áÒ»¸öXMLHttpRequest¶ÔÏ󽫵÷ÓõĻص÷ʼþ´¦ÀíÆ÷-µ±ËüµÄreadyStateÖµ¸Ä±äʱµ÷Ó᣼Çס£¬readyStateÖµµÄ¸Ä±ä½«»á¼¤·¢Ò»¸öreadystatechangeʼþ¡£Äã¿ÉÒÔʹÓÃonreadystatechangeÊôÐÔÀ´×¢²á¸Ã»Øµ÷ʼþ´¦ÀíÆ÷¡£

xmlHttpReq.onreadystatechange=processRequest;

¡¡¡¡È»ºó£¬ÎÒÃÇÐèҪʹÓÃsend()·½·¨·¢Ë͸ÃÇëÇó¡£ÒòΪÕâ¸öÇëÇóʹÓõÄÊÇHTTP GET·½·¨£¬ËùÒÔ£¬Äã¿ÉÒÔÔÚ²»Ö¸¶¨²ÎÊý»òʹÓÃnull²ÎÊýµÄÇé¿öϵ÷ÓÃsend()·½·¨¡£

xmlHttpReq.send(null);

¡¡¡¡Îå¡¢ ´¦ÀíÇëÇó

¡¡¡¡ÔÚÕâ¸öʾÀýÖУ¬ÒòΪHTTP·½·¨ÊÇGET£¬ËùÒÔÔÚ·þÎñÆ÷¶ËµÄ½ÓÊÕservlet½«µ÷ÓÃÒ»¸ödoGet()·½·¨£¬¸Ã·½·¨½«¼ìË÷ÔÚURLÖÐÖ¸¶¨µÄcatalogId²ÎÊýÖµ£¬²¢ÇÒ´ÓÒ»¸öÊý¾Ý¿âÖмì²éËüµÄÓÐЧÐÔ¡£

¡¡¡¡±¾ÎÄʾÀýÖеÄÕâ¸öservletÐèÒª¹¹ÔìÒ»¸ö·¢Ë͵½¿Í»§¶ËµÄÏìÓ¦£»¶øÇÒ£¬Õâ¸öʾÀý·µ»ØµÄÊÇXMLÀàÐÍ£¬Òò´Ë£¬Ëü°ÑÏìÓ¦µÄHTTPÄÚÈÝÀàÐÍÉèÖÃΪtext/xml²¢ÇÒ°ÑCache-ControlÍ·²¿ÉèÖÃΪno-cache¡£ÉèÖÃCache-ControlÍ·²¿¿ÉÒÔ×èÖ¹ä¯ÀÀÆ÷¼òµ¥µØ´Ó»º´æÖÐÖØÔØÒ³Ãæ¡£

public void doGet(HttpServletRequest request£¬
HttpServletResponse response)
throws ServletException£¬ IOException {
¡¡...
¡¡...
¡¡response.setContentType("text/xml");
¡¡response.setHeader("Cache-Control"£¬ "no-cache");
}

¡¡¡¡À´×ÔÓÚ·þÎñÆ÷¶ËµÄÏìÓ¦ÊÇÒ»¸öXML DOM¶ÔÏ󣬴˶ÔÏ󽫴´½¨Ò»¸öXML×Ö·û´®-ÆäÖаüº¬ÒªÔÚ¿Í»§¶Ë½øÐд¦ÀíµÄÖ¸Áî¡£ÁíÍ⣬¸ÃXML×Ö·û´®±ØÐëÓÐÒ»¸ö¸ùÔªËØ¡£

out.println("£¼catalogId£¾valid£¼/catalogId£¾");

¡¡¡¡¡¾×¢Òâ¡¿XMLHttpRequest¶ÔÏóµÄÉè¼ÆÄ¿µÄÊÇΪÁË´¦ÀíÓÉÆÕͨÎı¾»òXML×é³ÉµÄÏìÓ¦£»µ«ÊÇ£¬Ò»¸öÏìÓ¦Ò²¿ÉÄÜÊÇÁíÍâÒ»ÖÖÀàÐÍ£¬Èç¹ûÓû§´úÀí(UA)Ö§³ÖÕâÖÖÄÚÈÝÀàÐ͵ϰ¡£

¡¡¡¡µ±ÇëÇó״̬¸Ä±äʱ£¬XMLHttpRequest¶ÔÏóµ÷ÓÃʹÓÃonreadystatechange×¢²áµÄʼþ´¦ÀíÆ÷¡£Òò´Ë£¬ÔÚ´¦Àí¸ÃÏìӦ֮ǰ£¬ÄãµÄʼþ´¦ÀíÆ÷Ó¦¸ÃÊ×Ïȼì²éreadyStateµÄÖµºÍHTTP״̬¡£µ±ÇëÇóÍê³É¼ÓÔØ£¨readyStateֵΪ4£©²¢ÇÒÏìÓ¦ÒѾ­Íê³É£¨HTTP״̬Ϊ"OK"£©Ê±£¬Äã¾Í¿ÉÒÔµ÷ÓÃÒ»¸öJavaScriptº¯ÊýÀ´´¦Àí¸ÃÏìÓ¦ÄÚÈÝ¡£ÏÂÁнű¾¸ºÔðÔÚÏìÓ¦Íê³Éʱ¼ì²éÏàÓ¦µÄÖµ²¢µ÷ÓÃÒ»¸öprocessResponse()·½·¨¡£

function processRequest(){
¡¡if(xmlHttpReq.readyState==4){
¡¡¡¡if(xmlHttpReq.status==200){
¡¡¡¡¡¡processResponse();
¡¡¡¡}
¡¡}
}

¡¡¡¡¸ÃprocessResponse()·½·¨Ê¹ÓÃXMLHttpRequest¶ÔÏóµÄresponseXMLºÍresponseTextÊôÐÔÀ´¼ìË÷HTTPÏìÓ¦¡£ÈçÉÏÃæËù½âÊ͵쬽öµ±ÔÚÏìÓ¦µÄýÌåÀàÐÍÊÇtext/xml£¬application/xml»òÒÔ+xml½áβʱ£¬Õâ¸öresponseXML²Å¿ÉÓá£Õâ¸öresponseTextÊôÐÔ½«ÒÔÆÕͨÎı¾ÐÎʽ·µ»ØÏìÓ¦¡£¶ÔÓÚÒ»¸öXMLÏìÓ¦£¬Ä㽫°´ÈçÏ·½Ê½¼ìË÷ÄÚÈÝ£º

var msg=xmlHttpReq.responseXML;

¡¡¡¡½èÖúÓÚ´æ´¢ÔÚmsg±äÁ¿ÖеÄXML£¬Äã¿ÉÒÔʹÓÃDOM·½·¨getElementsByTagName()À´¼ìË÷¸ÃÔªËØµÄÖµ£º

var catalogId=msg.getElementsByTagName("catalogId")[0].firstChild.nodeValue;

¡¡¡¡×îºó£¬Í¨¹ý¸üÐÂWebÒ³ÃæµÄvalidationMessage divÖеÄHTMLÄÚÈݲ¢½èÖúÓÚinnerHTMLÊôÐÔ£¬Äã¿ÉÒÔ²âÊÔ¸ÃÔªËØÖµÒÔ´´½¨Ò»¸öÒªÏÔʾµÄÏûÏ¢£º

if(catalogId=="valid"){
¡¡var validationMessage = document.getElementById("validationMessage");
¡¡validationMessage.innerHTML = "Catalog Id is Valid";
}
else
{
¡¡var validationMessage = document.getElementById("validationMessage");
¡¡validationMessage.innerHTML = "Catalog Id is not Valid";
}

¡¡¡¡Áù¡¢ С½á

¡¡¡¡ÉÏÃæ¾ÍÊÇXMLHttpRequest¶ÔÏóʹÓõÄËùÓÐϸ½ÚʵÏÖ¡£Í¨¹ý²»±Ø°ÑWebÒ³Ãæ¼ÄË͵½·þÎñÆ÷¶øÊµÏÖÊý¾Ý´«ËÍ£¬XMLHttpRequest¶ÔÏóΪ¿Í»§¶ËÓë·þÎñÆ÷Ö®¼äÌṩÁËÒ»ÖÖ¶¯Ì¬µÄ½»»¥ÄÜÁ¦¡£Äã¿ÉÒÔʹÓÃJavaScriptÆô¶¯Ò»¸öÇëÇó²¢´¦ÀíÏàÓ¦µÄ·µ»ØÖµ£¬È»ºóʹÓÃä¯ÀÀÆ÷µÄDOM·½·¨¸üÐÂÒ³ÃæÖеÄÊý¾Ý¡£