<html>
<head>
<script type="text/javascript">
var req=null;
var console=null;
var READY_STATE_UNINITIALIZED=0;
var READY_STATE_LOADING=1;
var READY_STATE_LOADED=2;
var READY_STATE_INTERACTIVE=3;
var READY_STATE_COMPLETE=4;
function sendRequest(url,params,HttpMethod){
if(!HttpMethod){
HttpMethod="GET";
}
req = initXMLHTTPRequest();
if(req){
req.onreadystatechange=onReadyState;
alert(req.readyState);
req.open(HttpMethod,url,true);
alert(req.readyState);
req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
alert(req.readyState);
req.send(params);
alert(req.readyState);
}
}
function initXMLHTTPRequest(){
var xmlHttpO = null;
try {
xRequest = new XMLHttpRequest();
}catch (e) {
try {
xRequest = new ActiveXObject("Msxml2.XMLHTTP");
}catch (e) {
xRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
}
if (xRequest == null) {
alert("Your browser does not support AJAX!");
return;
}
return xRequest;

}
function onReadyState(){

var ready=req.readyState;
//alert(ready);
var data = null;
if(ready == READY_STATE_COMPLETE){
data = req.responseText;
}else{
data = "loading...{" + ready + "}";
}
toConsole(data);
}
function toConsole(data){
if(console!=null){
var newline=document.createElement("div");
console.appendChild(newline);
var  newtext = document.createTextNode(data);
console.appendChild(newtext);
}
}
window.onload=function(){
console = document.getElementById("console");
sendRequest("data.txt");
}
</script>
</style>
</head>
<body>
<div id='console'></div>
</body>
</html>ie中结果
loading...{1}
loading...{1}
loading...{3}为什么能够监听到两遍"1"阿?不是状态改变才能监听到麽?我是新手,帮忙阿

解决方案 »

  1.   

    使用回调方法必须在 READY_STATE_COMPLETE和httpstatus=200得情况下才可以,因为那时代表页面装在完成。
      

  2.   

    不是状态改变才能监听到麽?
    对阿,网络要进行3次握手,所以状态改变不只一次。
    而且,你还少个条件,万一网络中断或者发生异常,你的代码还是会执行
    正确的调用方法
    if(ready == READY_STATE_COMPLETE){
        if (req.status == 200) {
            data = req.responseText;
        }
    } else {
        //这种地方调用没有意义三次握手,具体状态怎么变,看网络状态了
    }