一旦脚本调用了send方法,浏览器就会在后台发送请求到浏览器。因为请求是在后台处理的,所以Ajax依靠事件来通知你这个请求的进度的进展情况,在上个随笔的里,使用handleResponse函数处理这些事件:
function handleResponse(e){
if(e.target.readyState==XMLHttpRequest.DONE&&e.target.status==200){
document.getElementById("target").innerHTML=e.target.responseText;
}
}
当readystatechange事件被触发后,浏览器会把一个Event对象传递给指定的处理函数。这个event对象的target属性则会被设为与此事件关联的XMLHttpRequest。多个不同阶段会通过readystatechange事件作为传递信号,你可以读取XMLHttpRequest,readyState属性的值来确定当前处理的是哪一个。下表展示了这个属性的各个值。
XMLHttpRequest readyState属性值
值 | 数值 | 说明 |
---|---|---|
UNSENT | 0 | 已创建XMLHttpRequest对象 |
OPENED | 1 | 已调用open方法 |
HEADERS_RECEIVED | 2 | 已收到服务器响应的标头 |
LOADING | 3 | 已收到服务器响应 |
DONE | 4 | 响应完成或已失败 |
DONE状态并不意味着请求成功,它只代表请求已经完成。可以通过status属性获得HTTP状态码,它会返回一个数值(比如200代表成功)。只有结合readyState和status属性的值才能够确定响应的请求的结果。只有当readyState的值为DONE并且status的值为200时用XMLHttpRequest.responseText属性获得服务器发送的数据,就如 document.getElementById("target").innerHTML=e.target.responseText;responseText属性会返回一个字符串,代表从服务器上取回的数据。