AJAX是一个缩写,它的全称是Asynchronous JavaScript and XML,意思是异步JavaScript和XML,也就是用JavaScript执行异步网络请求.
AJAX不是一项新技术,而是杰西詹姆斯加勒特(Jesse James Garrett)在2005年提出的一个新术语,用来描述一种利用现有技术集的‘新’方法,包括:
HTML或XHTML
半铸钢钢性铸铁(Cast Semi-Steel)
Java Script语言
数字正射影像图
可扩展置标语言
XSLT
XMLHttpRequest
虽然X在AJAX中代表XML,但JSON比XML使用更广泛,因为它有很多优点,比如更轻,是Javascript的一部分。JSON和XML都是用来封装AJAX模型中的信息。
如果需要更新内容,传统网页(没有AJAX)必须重新加载整个网页。
AJAX可以通过在后台与服务器交换少量数据,使网页异步更新。这意味着可以更新网页的一部分,而无需重新加载整个网页。
XMLHttpRequest(XHR)对象用于与服务器交互。XMLHttpRequest可以在不刷新页面的情况下请求特定的URL并获取数据。这允许网页在不影响用户操作的情况下更新页面的本地内容。XMLHttpRequest广泛应用于AJAX编程中。
其工作原理主要经过以下步骤:
客户端发送一个请求,请求被交给xhr。
Xhr向服务提交请求。
业务处理服务器。
服务器响应数据被传递给xhr对象。
Xhr对象接收数据,JavaScript将数据写入页面。
根据AJAX的工作原理,其创建步骤主要包括:
创建一个XMLHttpRequest对象就是创建一个异步调用对象。
创建一个新的HTTP请求,并指定HTTP请求的方法、URL和身份验证信息。
设置响应HTTP请求状态变化的函数。
发送一个HTTP请求。
获取异步调用返回的数据。
使用JavaScript和DOM实现本地刷新。
以下是使用AJAX的完整过程。
const request=new XMlhttprequest();
要创建HTTP请求,可以使用XMLHttpReques t对象的open()方法,其语法代码如下:
request.open(方法、url、异步、用户、密码);
参数分辨率:
方法要使用的HTTP方法,如“GET”、“POST”、“PUT”、“DELETE”等。
Url指示将请求发送到的URL地址。
Async(可选)一个可选的布尔参数,指示是否异步执行操作。默认值为真。如果该值为false,则send()方法在收到回复之前不会返回。如果为真,则事件侦听器可以获得已完成事务的通知。如果多部分属性为真,则必须为真,否则将引发异常。
用户(出于身份验证目的的可选用户名,默认值为空。
密码(可选)用于身份验证的密码。默认值为空。
创建HTTP请求后,您应该能够将HTTP请求发送到Web服务器。但是,发送HTTP请求的目的是接收服务器返回的数据。从创建一个XMLHttpRequest对象。
开始,到发送数据、接收数据、XMLHttpRequest 对象一共会经历以下 5 种状态:总的来说,readyState 属性的值有以下几种:
只读属性 XMLHttpRequest.status 返回了 XMLHttpRequest 响应中的数字状态码。status 的值是一个无符号短整型。在请求完成前,status 的值为 0。值得注意的是,如果 XMLHttpRequest 出错,浏览器返回的 status 也为0:
var xhr = new XMLHttpRequest();
console.log('UNSENT', xhr.readyState); // readyState 为 0
xhr.open('GET', '/api', true);
console.log('OPENED', xhr.readyState); // readyState 为 1
xhr.onprogress = function () {
console.log('LOADING', xhr.readyState); // readyState 为 3
};
xhr.onload = function () {
console.log('DONE', xhr.readyState); // readyState 为 4
};
xhr.send(null);
只有在XMLHttpRequest对象完成了以上5个步骤之后,才可以获取从服务器端返回的数据。因此,如果要获得从服务器端返回的数据,就必须要先判断XMLHttpRequest对象的状态:
const xhr = new XMLHttpRequest();
xmlHttpRequest.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
// do something here
}
}
XMLHttpRequest.send(data);
最后,附上一个简单的完整 AJAX 实例:
<button id="ajaxButton" type="button">Make a request</button>
<script>
var httpRequest;
document.getElementById("ajaxButton").addEventListener('click', makeRequest);
function makeRequest() {
httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = alertContents;
httpRequest.open('GET', 'test.html');
httpRequest.send();
}
function alertContents() {
if (httpRequest.readyState === XMLHttpRequest.DONE) {
if (httpRequest.status === 200) {
alert(httpRequest.responseText);
} else {
alert('There was a problem with the request.');
}
}
}
</script>

