任何 JavaScript 书上都会教你这样创建 Ajax 请求。

1
2
3
4
5
6
7
8
9
var XmlHttp;
if(window.ActiveXObject){
  XmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
}else if(window.XMLHttpRequest){
  XmlHttp = new XMLHttpRequest();
}
XmlHttp.open("POST", "getlist.php", true);
XmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
XmlHttp.send("type=" + reqType);

但是我一直这样使用:

1
2
3
4
5
// ...
XmlHttp.open("POST", "getlist.php", false);
// ...
var response = XmlHttp.responseText;
// #actions...

这样是同步请求,就是说在等待的时候浏览器相当于冻住了,你无法执行其他他的操作。这就违背了 Ajax 异步的本意。我直到一个月前才理解了 Ajax 异步请求的基础。其实就是像下面这样。

1
2
3
4
5
6
7
8
9
// ...
XmlHttp.open("POST", "getlist.php", true);
// ...
XmlHttp.onreadystatechange = function(){
 if(XmlHttp.readyState == 4){
    // Actions here...
  }
}
// ...