AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
XMLHttpRequest对象是ajax的基础,目前所有浏览器都支持XMLHttpRequest。
XMLHttpRequest 对象
重要方法
open()
xhr.open('get','http://localhost:8080/server?message=hello&data=hhh',true)
- open(method, url, async, user, password)重点强调三个参数:
- method:发送请求所使用的方法(常用GET、POST)
- 与POST相比,GET更简单也更快,并且在大部分情况下都能用;然而,在以下情况中,请使用POST请求:
-
- 无法使用缓存文件(更新服务器上的文件或数据库)
- 向服务器发送大量数据(POST 没有数据量限制)
- 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
- url:规定服务器端脚本的 URL(该文件可以是任何类型的文件,比如 .txt 和 .xml,或者服务器脚本文件,比如 .asp 和 .php (在传回响应之前,能够在服务器上执行任务));
- async:规定应当对请求进行异步(true)或同步(false)处理;true是在等待服务器响应时执行其他脚本,当响应就绪后对响应进行处理;false是等待服务器响应再执行。默认值为true
send()
xhr.send();
该方法可将请求送往服务器。
send(data),注意data格式;GET发送信息时直接加参数到url上就可以,比如url?a=a1&b=b1
setRequestHeader()
xhr.setRequestHeader('header','value');
POST传数据时,用来添加 HTTP 头(在open之后使用,在send之前使用)
重要事件
onreadystatechange
// 语法为
xhr.onreadystatechange = function(){};
// 或
xhr.addEventListener('readystatechange',function(){});
存有处理服务器响应的函数,每当 readyState 改变时,onreadystatechange 函数就会被执行。
var xhr= new XMLHttpRequest(),
method = "GET",
url = "https://developer.mozilla.org/";
xhr.open(method, url, true);
// 监听readyState的改变
xhr.onreadystatechange = function () {
console.log(xhr.readyState);
if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
console.log(xhr.responseText)
}
}
xhr.send();
onload
请求完成时触发,使用方法同上
使用addEventListener添加事件时,不用加on,如addEventListener('load')而非onload
重要属性
-
readyState:存有服务器响应的状态信息。(更加具体的状态码信息可自行百度)
- 0: 请求未初始化(代理被创建,但尚未调用 open() 方法)
- 1: 服务器连接已建立(
open方法已经被调用) - 2: 请求已接收(
send方法已经被调用,并且头部和状态已经可获得) - 3: 请求处理中(下载中,
responseText属性已经包含部分数据) - 4: 请求已完成,且响应已就绪(下载操作已完成)
-
responseText:获得字符串形式的响应数据。
-
status:响应状态
- 1xx:指示信息--表示请求已接收,继续处理
- 2xx:成功--表示请求已被成功接收、理解、接受
- 3xx:重定向--要完成请求必须进行更进一步的操作
- 4xx:客户端错误--请求有语法错误或请求无法实现
- 5xx:服务器端错误--服务器未能实现合法的请求
- 使用方法:
-
- 创建XMLHttpRequest对象
- open设置和服务器的交互信息
- send设置发送的数据,开始和服务器端交互
- onload注册事件,处理响应信息
WebSocket 对象
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
WebSocket允许服务端主动向客户端推送数据。 在 WebSocket 之前,客户端与服务器之间的交互通常是客户端发起请求,服务器响应请求。
WebSocket 的特点:
- 建立在 TCP 协议之上,服务器端的实现比较容易。
- 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
- 数据格式比较轻量,性能开销小,通信高效。
- 可以发送文本,也可以发送二进制数据。
- 建立连接后,WebSocket 连接一般长持续连接,较少握手和安全开销。
- 有效地节约了通信资源和带宽。
简单的用法如下:
var ws = new WebSocket("wss://echo.websocket.org");
ws.onopen = function() {
ws.send("Hello, World!");
};
ws.onmessage = function(evt) {
console.log(evt.data);
};
ws.onclose = function() {
console.log("WebSocket closed");
};
当然也可以用addEventListener添加事件,本质上就是使用的发布订阅模式
socket.addEventListener('open', function (event) {
socket.send('Hello Server!');
});
- onopen 回调,WebSocket 连接成功建立时触发
- onmessage 回调,客户端接收服务端数据时触发
- onclose 回调,WebSocket 连接关闭时触发
可以使用 ws.send() 向服务器发送数据,在onmessage中通过evt.data 获取接收到的数据