1.什么是AJAX:
AJAX (Asynchronous JavaScript and XML,异步JavaScript 与 XML)是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可 以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必需重载 整个网页面。
2.同步交互方式:
Ⅰ. 传统Web网页采用同步交互方式,用户向服务器发送一个请求,然后Web服务器根据用户请求进行后台运行,并返回结果。即一种“处理——等待——处理 —— 等待”模式。
Ⅱ. 不流畅的执行交互方式,用户在访问网站的过程中,经常会出现长时间等待服务器响应,导致浏览器显示白屏的情况。
Ⅲ. 用户往往只更新页面中的一小部分信息,而不是整个页面,数据的重复传递,延长了用户等待时间,浪费了大量的网络资源和带宽。
Ⅳ. AJAX采用异步交互方式,在客户端与服务器之间引用一个中间层。用户的浏览器在执行请求时,使用AJAX技术转发客户端请求与服务器交互, JavaScript通过使用AJAX技术可以使页面不再被整体刷新,只仅仅更新用户需要的部分。
3.AJAX的好处:
减轻服务器的负担,加快浏览速度。
更多的用户交互,带来更好的用户体验。
基于标准化并被广泛支持的技术,不用下载插件,现在浏览器都可以很好的支持AJAX技术。
进一步促进页面呈现与数据分离。
4.XMLHttpRequest对象属性/方法:
属性/方法 |
说 明 |
about() |
取消请求 |
getAllResponseHeaders() |
获取响应的所有http头 |
getResponseHeader() |
获取指定http头 |
open(method,url) |
创建请求,method请求类型,(GET,POST) |
send() |
发送请求 |
setRequestHeader() |
指定请求的Http头 |
属性/方法 |
说 明 |
readyState属性 |
HTTP 请求的状态 0:未初始化。未调用open()方法 1:启动。已经调用open()方法,未调用send()方法,请求还没有被发送 2:发送。已经调用send()方法,HTTP 请求已发送到 Web 服务器。未接收到响应 3:接收。已经接收到部分数据 4:完成。HTTP 响应已经完全接收。 每次这个属性的值增加的时候,都会触发 onreadystatechange 事件句柄 |
responseText |
服务器返回文本,目前为止为服务器接收到的响应体(不包括头部),或者如果还没有接收到数据的话,就是空字符串。如果 readyState 小于 3,这个属性就是一个空字符串。当 readyState 为 3,这个属性返回目前已经接收的响应部分。如果 readyState 为 4,这个属性保存了完整的响应体。 |
属性/方法 |
说 明 |
responseXML |
服务器返回XML,可以当作DOM处理 |
status |
服务器返回的HTTP请求响应值: 200表示请求成功 202表示请求被接收但未处理完成 400表示错误的请求 404表示资源未找到, "Not Found" 错误 500 表示内部服务器错误 |
创建完XMLHttpRequest对象后需要利用open()方法建立并向服务器发送一个请求 open(method,url,async)
method表示请求类型,通常为GET、POST等,url表示请求的地址,可以是绝对地址也可以是相对地址,async是一个布尔值表示是否为异步请求,默认值为异步请求 true。 xmlHttp.open("get","data.txt", true);
这段代码表示使用GET方法异步请求相对地址data.txt文件,再发出请求以后根据readyState属性来判断目前请求的情况,如果该属性发生变化,就会触发 onreadystatechange事件,可以通过以下代码处理。
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
alert(xmlHttp.responseText);
}
}
同时还需要判断服务器返回响应的状态status修改以上代码:
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
alert(xmlHttp.responseText);
}
}
通过以上两段代码我们完成了请求的建立,并对请求状态进行了事件的注册,当请求状态发生变化时进行处理,但是并没有将请求发送到服务端,这里就需要使用send()方法发送请求。
send(body)
send方法只有一个参数body,表示向服务器发送的数据,格式可以字符串方式传递数据。
send(name=’jack’&id=28);
如果在open中指定GET方式,这些参数作为查询字符串提交,如果指定的时POST方式,则作为HTTP的POST方法提交。对于send方法body参数时必须的,如果不发送数据可以使用以下代码:
xmlHttp.send(null);
如果使用POST方式提交数据,需要在提交之前设置以下请求的头部。
xmlHttp.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);
5.GET方法:
从指定的资源请求数据。查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
/products?type=1&order=desc
GET方法的特点“:
GET 请求可被缓存
GET 请求保留在浏览器历史记录中
GET 请求可被收藏为书签
GET 请求不应在处理敏感数据时使用
GET 请求有长度限制
GET 请求只应当用于取回数据
6.POST方法:
向指定的资源提交要被处理的数据,是在 POST 请求的 HTTP 消息主体中发送的如下:
xmlHttp.send("name=value1&password=value2");
同时需要设置请求头部请求内容的类型:
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
POST方法特点:
POST 请求不会被缓存
POST 请求不会保留在浏览器历史记录中
POST 不能被收藏为书签
POST 请求对数据长度没有要求
7.其他HTTP请求方法:
方法 |
说 明 |
HEAD |
与 GET 相同,但只返回 HTTP 报头,不返回文档主体。 |
PUT |
上传指定的 URI 表示。 |
DELETE |
删除指定资源。 |
OPTIONS |
返回服务器支持的 HTTP 方法。 |
CONNECT |
把请求连接转换到透明的 TCP/IP 通道。 |