鏈枃鏉ユ簮浜?鏈夎兘澶熸彁渚涙渶鍒濈炕璇戣呯殑鏈嬪弸鍚楋紵)錛?BR>http://developer.mozilla.org/en/docs/AJAX:Getting_Started
銆銆榪欑瘒鏂囩珷灝嗗甫鎮ㄦ祻瑙堟暣涓狝JAX鐨勫熀鏈璨?騫跺睍紺轟袱涓畝鍗曠殑渚嬪瓙璁╂偍杞繪澗涓婅礬.
銆銆浠涔堟槸 AJAX?
銆銆AJAX (寮傛 JavaScript 鍜?XML) 鏄釜鏂頒駭鐢熺殑鏈,涓撲負鎻忚堪JavaScript鐨勪袱欏瑰己澶фц兘.榪欎袱欏規ц兘鍦ㄥ騫存潵涓鐩磋緗戠粶寮鍙戣呮墍蹇界暐,鐩村埌鏈榪慓mail, Google suggest鍜実oogle Maps鐨勬í絀哄嚭涓栨墠浣夸漢浠紑濮嬫剰璇嗗埌鍏墮噸瑕佹?
銆銆榪欎袱欏硅蹇借鐨勬ц兘鏄?
銆銆鏃犻渶閲嶆柊瑁呰澆鏁翠釜欏甸潰渚胯兘鍚戞湇鍔″櫒鍙戦佽姹?
銆銆瀵筙ML鏂囨。鐨勮В鏋愬拰澶勭悊錛?BR>
姝ラ 1 – "璇?" --- 濡備綍鍙戦佷竴涓狧TTP璇鋒眰
銆銆涓轟簡鐢↗avaScript鍚戞湇鍔″櫒鍙戦佷竴涓狧TTP璇鋒眰, 闇瑕佷竴涓叿澶囪繖縐嶅姛鑳界殑綾誨疄渚? 榪欐牱鐨勭被棣栧厛鐢盜nternet Explorer浠ctiveX瀵硅薄寮曞叆, 琚О涓篨MLHTTP. 鍚庢潵Mozilla, Safari 鍜屽叾浠栨祻瑙堝櫒綰風悍浠挎晥, 鎻愪緵浜哫MLHttpRequest綾?瀹冩敮鎸佸井杞殑ActiveX瀵硅薄鎵鎻愪緵鐨勬柟娉曞拰灞炴?
銆銆鍥犳, 涓轟簡鍒涘緩涓涓法嫻忚鍣ㄧ殑榪欐牱鐨勭被瀹炰緥(瀵硅薄), 鍙互搴旂敤濡備笅浠g爜:
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
http_request = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
銆銆濡傛灉鏈嶅姟鍣ㄧ殑鍝嶅簲娌℃湁XML mime-type header,鏌愪簺Mozilla嫻忚鍣ㄥ彲鑳芥棤娉曟甯稿伐浣? 涓轟簡瑙e喅榪欎釜闂, 濡傛灉鏈嶅姟鍣ㄥ搷搴旂殑header涓嶆槸text/xml,鍙互璋冪敤鍏跺畠鏂規硶淇敼璇eader.
http_request = new XMLHttpRequest();
http_request.overrideMimeType('text/xml');
http_request.onreadystatechange = nameOfTheFunction;
銆銆娉ㄦ剰:鍦ㄥ嚱鏁板悕鍚庢病鏈夋嫭鍙?涔熸棤闇浼犻掑弬鏁?鍙﹀榪樻湁涓縐嶆柟娉?鍙互鍦ㄦ墘欏?fly)涓畾涔夊嚱鏁板強鍏跺鍝嶅簲瑕侀噰鍙栫殑琛屼負,濡備笅鎵紺?
http_request.onreadystatechange = function(){
// do the thing
};
http_request.open('GET', 'http://www.example.org/some.file', true);
http_request.send(null);
銆銆絎簩涓弬鏁版槸璇鋒眰欏甸潰鐨刄RL.鐢變簬鑷韓瀹夊叏鐗規х殑闄愬埗,璇ラ〉闈笉鑳戒負絎笁鏂瑰煙鍚嶇殑欏甸潰.鍚屾椂涓瀹氳淇濊瘉鍦ㄦ墍鏈夌殑欏甸潰涓兘浣跨敤鍑嗙‘鐨勫煙鍚?鍚﹀垯璋冪敤open()浼氬緱鍒?permission denied"鐨勯敊璇彁紺?涓涓父瑙佺殑閿欒鏄闂珯鐐規椂浣跨敤domain.tld,鑰屽綋璇鋒眰欏甸潰鏃?鍗翠嬌鐢╳ww.domain.tld.
銆銆絎笁涓弬鏁拌緗姹傛槸鍚︿負寮傛妯″紡.濡傛灉鏄疶RUE, JavaScript鍑芥暟灝嗙戶緇墽琛?鑰屼笉絳夊緟鏈嶅姟鍣ㄥ搷搴?榪欏氨鏄?AJAX"涓殑"A".
銆銆濡傛灉絎竴涓弬鏁版槸"POST",send()鏂規硶鐨勫弬鏁板彲浠ユ槸浠諱綍鎯抽佺粰鏈嶅姟鍣ㄧ殑鏁版嵁. 榪欐椂鏁版嵁瑕佷互瀛楃涓茬殑褰㈠紡閫佺粰鏈嶅姟鍣?濡備笅鎵紺?
name=value&anothername=othervalue&so=on
姝ラ 2 – "鏀跺埌!" --- 澶勭悊鏈嶅姟鍣ㄧ殑鍝嶅簲
銆銆褰撳彂閫佽姹傛椂,瑕佹彁渚涙寚瀹氬鐞嗗搷搴旂殑JavaScript鍑芥暟鍚?
http_request.onreadystatechange = nameOfTheFunction;
銆銆鎴戜滑鏉ョ湅鐪嬭繖涓嚱鏁扮殑鍔熻兘鏄粈涔?棣栧厛鍑芥暟浼氭鏌ヨ姹傜殑鐘舵?濡傛灉鐘舵佸兼槸4,灝辨剰鍛崇潃涓涓畬鏁寸殑鏈嶅姟鍣ㄥ搷搴斿凡緇忔敹鍒頒簡,鎮ㄥ皢鍙互澶勭悊璇ュ搷搴?if (http_request.readyState == 4) {
// everything is good, the response is received
} else {
// still not ready
}
銆銆0 (鏈垵濮嬪寲)
銆銆1 (姝e湪瑁呰澆)
銆銆2 (瑁呰澆瀹屾瘯)
銆銆3 (浜や簰涓?
銆銆4 (瀹屾垚)
銆銆鎺ョ潃,鍑芥暟浼氭鏌TTP鏈嶅姟鍣ㄥ搷搴旂殑鐘舵佸? 瀹屾暣鐨勭姸鎬佸彇鍊煎彲鍙傝 W3C site. 鎴戜滑鐫閲嶇湅鍊間負200 OK鐨勫搷搴?
if (http_request.status == 200) {
// perfect!
} else {
// there was a problem with the request,
// for example the response may be a 404 (Not Found)
// or 500 (Internal Server Error) response codes
}
http_request.responseText – 浠ユ枃鏈瓧絎︿覆鐨勬柟寮忚繑鍥炴湇鍔″櫒鐨勫搷搴?nbsp;
http_request.responseXML – 浠MLDocument瀵硅薄鏂瑰紡榪斿洖鍝嶅簲.澶勭悊XMLDocument瀵硅薄鍙互鐢↗avaScript DOM鍑芥暟
姝ラ 3 – "涓囦簨淇卞!" - 綆鍗曞疄渚?/B>
銆銆鎴戜滑鐜板湪灝嗘暣涓繃紼嬪畬鏁村湴鍋氫竴嬈?鍙戦佷竴涓畝鍗曠殑HTTP璇鋒眰. 鎴戜滑鐢↗avaScript璇鋒眰涓涓狧TML鏂囦歡, test.html, 鏂囦歡鐨勬枃鏈唴瀹逛負"I'm a test.".鐒跺悗鎴戜滑"alert()"test.html鏂囦歡鐨勫唴瀹?
<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>
銆銆鏈緥涓?
銆銆鐢ㄦ埛鐐瑰嚮嫻忚鍣ㄤ笂鐨?璇鋒眰"閾炬帴;
銆銆鎺ョ潃鍑芥暟makeRequest()灝嗚璋冪敤.鍏跺弬鏁?– HTML鏂囦歡test.html鍦ㄥ悓涓鐩綍涓?
銆銆榪欐牱灝卞彂璧蜂簡涓涓姹?onreadystatechange鐨勬墽琛岀粨鏋滀細琚紶閫佺粰alertContents();
銆銆alertContents()灝嗘鏌ユ湇鍔″櫒鐨勫搷搴旀槸鍚︽垚鍔熷湴鏀跺埌,濡傛灉鏄?灝變細"alert()"test.html鏂囦歡鐨勫唴瀹?
姝ラ 4 – "X-鏂囨。" --- 澶勭悊XML鍝嶅簲
銆銆鍦ㄥ墠闈㈢殑渚嬪瓙涓?褰撴湇鍔″櫒瀵笻TTP璇鋒眰鐨勫搷搴旇鏀跺埌鍚?鎴戜滑浼氳皟鐢ㄨ姹傚璞$殑reponseText灞炴?璇ュ睘鎬у寘鍚簡test.html鏂囦歡鐨勫唴瀹?鐜板湪鎴戜滑鏉ヨ瘯璇時esponseXML灞炴?
銆銆棣栧厛,鎴戜滑鏂板緩涓涓湁鏁堢殑XML鏂囦歡,鍚庨潰鎴戜滑灝嗕嬌鐢ㄨ繖涓枃浠?璇ユ枃浠?test.xml)婧愪唬鐮佸涓嬫墍紺?
<?xml version="1.0" ?>
<root>
I'm a test.
</root>
...
onclick="makeRequest('test.xml')">
...
銆銆var xmldoc = http_request.responseXML;
銆銆var root_node = xmldoc.getElementsByTagName('root').item(0);
銆銆alert(root_node.firstChild.data);
銆銆榪欓噷,鎴戜滑浣跨敤浜唕esponseXML鎻愪緵鐨刋MLDocument瀵硅薄騫剁敤DOM鏂規硶鑾峰彇瀛樹簬XML鏂囦歡涓殑鍐呭.