標籤:style blog http color io os java ar strong
考察w3school上的一個實際的例子[1]:
<html><head><script type="text/javascript">function loadXMLDoc(){var xmlhttp;if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); }else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }xmlhttp.open("GET","/ajax/test1.txt",true);xmlhttp.send();}</script></head><body><div id="myDiv"><h2>Let AJAX change this text</h2></div><button type="button" onclick="loadXMLDoc()">通過 AJAX 改變內容</button></body></html>
關注下標紅部分的代碼的順序,如果把代碼改成如下的順序:
<html><head><script type="text/javascript">function loadXMLDoc(){var xmlhttp;if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); }else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }xmlhttp.open("GET","/ajax/test1.txt",true);xmlhttp.send();xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }}</script></head><body><div id="myDiv"><h2>Let AJAX change this text</h2></div><button type="button" onclick="loadXMLDoc()">通過 AJAX 改變內容</button></body></html>
<html><head><script type="text/javascript">function loadXMLDoc(){var xmlhttp;if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); }else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }xmlhttp.open("GET","/ajax/test1.txt",true);xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }xmlhttp.send();}</script></head><body><div id="myDiv"><h2>Let AJAX change this text</h2></div><button type="button" onclick="loadXMLDoc()">通過 AJAX 改變內容</button></body></html>
實測證明:三種代碼順序的執行結果是一樣的。這是由於以下的xhlhttp.onreadystatechange=function
xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }
僅僅是一個函數的聲明(或者說 註冊)【在JS裡面,是允許函數嵌套聲明的】,僅僅是把xhlhttp的onreadystatechange “屬性”(實際是個函數)聲明出來,並不立即執行。而
xmlhttp.open("GET","/ajax/test1.txt",true);xmlhttp.send();
是會立即執行的。如果想要xhlhttp.onreadystatechange=function立即執行,只需要將該模組聲明為 “立即執行”。
( xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }) ();
Reference
[1]http://www.w3school.com.cn/tiy/t.asp?f=ajax_async_true
關於AJAX中函數的執行順序