不太明白Ajax中readystate的逻辑,w3c找到的代码如下,在此请教一下

不太明白Ajax中readystate的逻辑,w3c找到的代码如下,在此请教一下

问题描述:

function showCustomer(str)
{
var xmlhttp;
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
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("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getcustomer.asp?q="+str,true);
xmlhttp.send();
}

onchange事件会触发该函数

按照我的逻辑:onchange触发后,此时xmlhttp.onreadystatechange==0,然后函数执行完毕了,根本没有机会让xmlhttp.onreadystatechange==4,所以if中的语句永远不会执行。
而实际是if中的语句会得到执行,我的逻辑是怎么错的?

onreadystatechange是状态转换函数,状态没变一次就执行一次,共5中状态,

0 - (未初始化)还没有调用send()方法
1 - (载入)已调用send()方法,正在发送请求
2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
3 - (交互)正在解析响应内容
4 - (完成)响应内容解析完成,可以在客户端调用了

ajax状态

然而onchange事件并不只触发一次啊,readyState从0到1,1到2,2到3,3到4,都会触发onchange事件,在readyState从3变到4的时候且xmlhttp.status==200xmlhttp.status==200会执行if中的语句