ajax原理是什么?如何实现?

82 阅读2分钟

一、是什么

AJAX 全称(Async Javascript and XML)

即异步的 JavaScript  和 XML(可扩展标记语言) ,是一种创建交互式网页应用的网页开发技术,可以在不重新加载整个网页的情况下,与服务器交换数据,并且更新部分网页。

Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用JavaScript来操作DOM而更新页面

流程图如下:

image.png

举个例子: 领导想找小李汇报一下工作,就委托秘书去叫小李,自己就接着做其他事情,直到秘书告诉他小李已经到了,最后小李跟领导汇报工作

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)
        })