异步响应状态

课后整理 2020-12-20

使用readyState属性可以实时跟踪异步响应状态。当该属性值发生变化时,会触发readystatechange事件,调用绑定的回调函数。readyState属性值说明如下所示。

如果readyState属性值为4,则说明响应完毕,那么就可以安全读取响应的数据。注意,考虑到各种特殊情况,更安全的方法是,同时监测HTTP状态码,只有当HTTP状态码为200时,说明HTTP响应顺利完成。

【示例】以上面示例为例,修改请求为异步响应请求,然后通过status属性获取当前的HTTP状态码。如果readyState属性值为4,且status(状态码)属性值为200,则说明HTTP请求和响应过程顺利完成,这时可以安全、异步的读取数据了。

window.onload =  function(){                      //页面初始化
    var b =  document.getElementsByTagName("input")[0];
    b.onclick = function(){
        var url = "server.php"                  //设置请求的地址
        var xhr = createXHR();                //实例化XMLHttpRequest对象
        xhr.open("POST",url, true);         //建立连接,要求异步响应
         xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');     
                                                               //设置为表单方式提交
        xhr.onreadystatechange = function(){   //绑定响应状态事件监听函数
            if(xhr.readyState == 4){        //监听readyState状态
                if (xhr.status == 200 || xhr.status == 0){       //监听HTTP状态码
                     console.log(xhr.responseText);             //接收数据
                }
            }
        }
         xhr.send("callback=functionName");                  //发送请求
    } 
}