一、是什么
AJAX 全称(Async Javascript and XML)
即异步的 JavaScript 和 XML(可扩展标记语言) ,是一种创建交互式网页应用的网页开发技术,可以在不重新加载整个网页的情况下,与服务器交换数据,并且更新部分网页。
Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用JavaScript来操作DOM而更新页面
流程图如下:
举个例子: 领导想找小李汇报一下工作,就委托秘书去叫小李,自己就接着做其他事情,直到秘书告诉他小李已经到了,最后小李跟领导汇报工作
Ajax请求数据流程与“领导想找小李汇报一下工作”类似,上述秘书就相当于XMLHttpRequest对象,领导相当于浏览器,响应数据相当于小李 浏览器可以发送HTTP请求后,接着做其他事情,等收到XHR返回来的数据再进行操作
二、实现过程
实现 Ajax 异步交互需要服务器逻辑进行配合,需要完成以下步骤:
- 创建 Ajax 的核心对象 XMLHttpRequest 对象
- 通过 XMLHttpRequest 对象的 open()方法与服务端建立连接
- 构建请求所需的数据内容,并通过 XMLHttpRequest 对象的 send() 方法发送给服务器端
- 通过 XMLHttpRequest 对象提供的 onreadystatechange 事件监听服务器端你的通信状态
- 接受并处理服务端向客户端响应的数据结果
- 将处理结果更新到 HTML 页面中
创建XMLHttpRequest对象
// 1. new XMLHttpRequest
let xhr = new XMLHttpRequest()
与服务器建立连接
xhr.open( method , url, [async][, user][, password])
- method:表示当前的请求方式,常见的有GET、POST
- url:服务端地址、接口等
- async:布尔值,表示是否异步执行操作,默认为true
- user: 可选的用户名用于认证用途;默认为null
- password: 可选的密码用于认证用途,默认为null
给服务端发送数据
xhr.send(/*对象,字符串,表单数据等*/)
如果使用GET请求发送数据的时候,需要注意如下:
- 将请求数据添加到open()方法中的url地址中
- 发送请求数据中的send()方法中参数设置为null
监听load(请求成功)事件 ==> 可以获取响应数据
xhr.addEventListener('load', function() {
console.log(xhr.response) // 服务器返回的数据
})
三、举例
// 1. new XMLHttpRequest
let xhr = new XMLHttpRequest()
// 2. 设置请求方式和url
xhr.open('post', 'http://ajax-api.itheima.net/api/books')
// 根据接口文档的要求,设置请求头content-type
xhr.setRequestHeader('content-type', 'application/json'//需要自己设置content-type)
// 3. 发送
// send(请求体的内容)
const d = { bookname: '书名', author: '作者', publisher: '出版社' }
xhr.send(JSON.stringify(d))
// 4. 监听load事件,取到服务器回来的数据
xhr.addEventListener('load', () => {
console.log(xhr.response)
})