企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[toc] # AJAX ## 什么是AJAX? AJAX 是 `异步的 JavaScript 和 XML` 的英文首字母编写。 是一种在浏览器中通过 JS 代码和后端服务器进行数据通信的技术。 ## 浏览器如何发送 AJAX 请求(原生AJAX如何实现)? 浏览器中提供了一个 `XMLHttpRequest` 的对象,通过这个对象可以实现和服务器通信的功能。 示例代码: ~~~ // 1. 创建 XMLHttpRequest 对象 var xhr=new XMLHttpRequest(); // 2. 设置请求方式和地址 xhr.open('GET',url,false); // 3. 设置处理返回数据的回调函数 xhr.onreadystatechange=function(){ // 3.1 根据状态判断是否成功 if(xhr.readyState==4){ // 3.2 根据状态判断执行结果 if(xhr.status==200 || xhr.status==304){ // 3.3 输出返回的结果 console.log(xml.responseText) } } } // 4. 向后端发送请求 xml.send() ~~~ ## 如何将原生 AJAX 封装成 Promise 对象? 1. 创建 Promise 对象 2. 把AJAX代码放到 Promise 对象中 3. 通过调用 resolve 返回成功之后的结果 示例代码、 ~~~ // 创建 Promise 对象 const promise = new Promise(function(resolve, reject){ // 创建处理返回结果的回调函数 const handler = function() { if (this.readyState !== 4) { return; } if (this.status === 200) { // 如果成功就调用 resolve 设置为 fulfilled 状态,并返回结果 resolve(this.response); } else { // 如果失败就调用 reject 设置为 rejected 状态,并返回错误信息 reject(new Error(this.statusText)); } }; // 以下为异步的原生 AJAX 代码 const client = new XMLHttpRequest(); client.open("GET", url); // 设置上面创建的回调函数 client.onreadystatechange = handler; client.responseType = "json"; client.setRequestHeader("Accept", "application/json"); client.send(); }); ~~~ ## 为什么要使用 axios? axios 是一个高效、精简的已经封装好的 AJAX 的库,它内部使用了 ES6 中的 Promise 对 AJAX 进行封装,让我们可以直接使用 Promise 而无须自己再封装。 配合 async/await 一起使用,可以以同步的方式调用后端接口。 ## axios 如何配置基地址?为什么要配置? 因为我们调用的后端接口前面基础部分都是相同的,配置了基地址之后,我们每次调用接口时就无须再写前面公共的部分了。 两种方式: - 方式一、直接配置 ~~~ // 配置基地址 axios.default.baseURL = 'http://xxx.xxx.xxx/api/v1/' // 调用接口时无须再写基地址 axios.get('/users') // 相当于:http://xxx.xxx.xxx/api/v1/users ~~~ - 方式二、创建 axios 对象时配置 ~~~ // 创建对象时配置基地址 const http = axios.create({ baseURL: 'http://xxx.xxx.xxx/api/v1/', }); // 通过对象调用接口无须写基地址 http.get('/users') // 相当于:http://xxx.xxx.xxx/api/v1/users ~~~ ## axios 拦截器有哪些?干什么用的?应用场景? 拦截器分为 `请求` 和 `响应` 两种拦截器。 - 请求拦截器:在发送`请求之前`调用。 - 响应拦截器:在服务 `返回数据之后,交给程序之前` 调用。 应用场景: 请求拦截器(发送之前): 1. 页面中显示一个 loading 的进度条 2. 向发送的请求头中添加 Token ,实现令牌的身价验证 响应拦截器(服务器返回后): 1. 销毁页面中显示的 loading 进度条 2. 根据返回的结果做统一的处理,比如,如果请求失败,统一提示错误的消息 ## 调用接口时有几种请求方式?一般什么时候使用? 向接口发送请求时,主要有以下五种方式: 1、GET :当获取数据时使用 2、POST:在添加数据时使用 3、DELETE:删除数据时使用 4. PUT:修改整条数据时使用 5. PATCH:修改数据的一部分时使用 示例代码、 ~~~ axios.get('/users?limit=10') // 获取10条记录 axios.delete('/users/10') // 删除id=10的用户 axios.post('/users',{name:'tom'}) // 添加一个新用户 axios.put('/users/10',{name:'jack'}) // 修改 id=10 的用户的 name=jack ~~~