1. AJAX 简介
AJAX(Asynchronous JavaScript and XML)是一种Web前端技术,可以在不刷新整个页面的情况下向Web服务器请求数据,更新部分页面。利用AJAX的技术可以实现无刷新登录、增量更新等效果。
2. AJAX 请求状态
AJAX请求的过程可以分为多个不同的状态,每个状态由readyState和status两个属性表示。
2.1 readyState
readyState属性表示请求的状态,取值从0到4。
0表示请求未初始化,即还没有调用XMLHttpRequest的open()方法。
1表示服务器连接已建立,即XMLHttpRequest的open()方法已经调用,但是send()方法未调用。
2表示请求已接收,即XMLHttpRequest的send()方法已经调用,并且已经接收到响应头。
3表示请求处理中,即正在接收响应体。
4表示请求已完成,即已经接收到响应体,并且已经可以使用responseText或responseXML属性获取响应数据。
2.2 status
status属性表示请求的结果,取值从100到599。常见的状态码有200表示OK,404表示Not Found,500表示Internal Server Error等。
3. AJAX 请求过程
在使用AJAX发送请求时,需要创建XMLHttpRequest对象,设置回调函数并发送请求。
3.1 创建XMLHttpRequest对象
在JavaScript中可以使用XMLHttpRequest对象创建AJAX请求。在创建XMLHttpRequest对象之前,需要检测浏览器是否支持该对象。在现代浏览器中,几乎所有浏览器都支持XMLHttpRequest对象。
function createXHR() {
if (typeof XMLHttpRequest != "undefined") {
return new XMLHttpRequest();
} else if (typeof ActiveXObject != "undefined") {
if (typeof arguments.callee.activeXString != "string") {
var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"],
i, len;
for (i = 0, len = versions.length; i < len; i++) {
try {
new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
break;
} catch (ex) {
// skip
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
} else {
throw new Error("No XHR object available.");
}
}
上面的代码中,首先判断是否支持XMLHttpRequest对象,如果支持则直接返回XMLHttpRequest对象。如果不支持,则判断是否支持ActiveXObject对象(IE浏览器专用)。如果支持,则使用ActiveXObject对象创建XMLHttpRequest对象。
3.2 设置回调函数
在发送AJAX请求之前,需要设置回调函数。回调函数在状态发生变化的时候被执行。
var xhr = createXHR();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
alert(xhr.responseText);
} else {
alert("Request was unsuccessful: " + xhr.status);
}
}
};
上面的代码中,设置回调函数为匿名函数。在状态变化的时候,如果状态为4(即请求已完成),则根据status的值来判断请求的结果。
如果状态码为200到299或304,则表示请求成功,通过xhr.responseText属性获取响应数据。
如果状态码不在200到299之间,或者等于404等错误码,则表示请求失败,通过xhr.status获取错误信息。
3.3 发送请求
在设置回调函数之后,就可以调用XMLHttpRequest对象的open()和send()方法来发送请求。
xhr.open("get", "example.php", true);
xhr.send(null);
上面的代码中,调用open()方法设置请求方法(get或post)、请求URL和同步或异步请求模式。调用send()方法发送请求,如果是get请求,则send()方法的参数为null。
4. 总结
本文介绍了AJAX中请求的不同就绪状态,包括readyState和status两个属性的含义。同时,也介绍了AJAX请求的过程,包括创建XMLHttpRequest对象、设置回调函数和发送请求。
在使用AJAX时,需要注意回调函数的设置和请求体的数据格式(如JSON、XML等)。同时也需要注意AJAX的跨域问题和安全性问题。