找回密码
 立即注册
首页 业界区 业界 Ajax入门以及Axios的详细使用(含Promise)

Ajax入门以及Axios的详细使用(含Promise)

疝镜泛 2025-6-6 10:10:35
1. 概述

1.1 是什么


  • Ajax = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)
  • Ajax 不是新的编程语言,而是一种用于创建快速动态网页的技术
  • Ajax 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容,使网页实现异步更新
  • 传统的网页(不使用 Ajax)如果需要更新内容,必需重载整个网页
  • Ajax 不需要任何浏览器插件,但需要用户允许 JavaScript 在浏览器上执行
  • XMLHttpRequest只是实现 Ajax 的一种方式
1.png

1.2 为什么


  • 以前数据都是写在代码里固定的, 无法随时变化
  • 现在数据可以从服务器上进行获取,让数据变活
1.3 入门程序


  • 需求:从服务器获取省份列表数据,展示到页面上
  • 步骤:

    • 引入 axios
    1. [/code]
    2. [list]
    3. [*]基本语法
    4. [/list][code]axios({
    5.         url: "目标资源地址",
    6. }).then(result => {
    7.         // 对服务器返回的数据做后续处理
    8. });
    复制代码
  • 示例
  1. [/code][size=5]2. axios[/size]
  2. [size=4]2.1 URL[/size]
  3. [list]
  4. [*][b]URL:[/b]统一资源定位符,简称网址,用于定位网络中的资源(网页,图片,数据,视频,音频等)
  5. [*][b]组成:[/b]协议,域名,资源路径(比较重要的三部分)
  6. [*][b]http 协议:[/b]超文本传输协议,规定了浏览器和服务器传递数据的格式
  7. [*][b]域名:[/b]标记服务器在互联网当中的方位,网络中有很多服务器,你想访问哪一台,需要知道它的域名
  8. [*][b]资源路径:[/b]一个服务器内有多个资源,用于标识你要访问的资源具体的位置
  9. [/list][align=center] 2.png [/align]
  10. [list]
  11. [*][b]查询参数:[/b]携带给服务器额外信息,让服务器返回想要的某一部分数据而不是全部数据
  12. [list]
  13. [*]格式:http://xxxx.com/xxx/xxx?参数名1=值1&参数名2=值2
  14. [*]参数名一般是后端规定的,值前端看情况传递即可
  15. [/list]
  16. [*]axios 如何携带查询参数?
  17. [/list][code]axios({
  18.         url: "目标资源地址",
  19.         params: {
  20.                 参数名: 值,
  21.         },
  22. }).then(result => {
  23.         // 对服务器返回的数据做后续处理
  24. });
复制代码

  • 示例 1:获取“河北省”下属的城市列表
  1. [/code]
  2. [list]
  3. [*]示例 2:根据输入的省份名字和城市名字,查询下属地区列表
  4. [/list][align=center] 3.png [/align]
  5. [code]<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" />
  6.         <form id="editForm" >
  7. <form action="javascript:;" >
  8.         <input type="text" name="uname" />
  9.         <br />
  10.         <input type="text" name="pwd" />
  11.         <br />
  12.         <input type="button"  value="提交" />
  13. </form>                <label >省份名字</label>
  14.                         <input type="text" value="北京" name="province"  placeholder="请输入省份名称" />
  15. <form action="javascript:;" >
  16.         <input type="text" name="uname" />
  17.         <br />
  18.         <input type="text" name="pwd" />
  19.         <br />
  20.         <input type="button"  value="提交" />
  21. </form>       
  22.                         <label >城市名字</label>
  23.                         <input type="text" value="北京市" name="city"  placeholder="请输入城市名称" />
  24.                
  25.         </form>
  26.         <button type="button" >查询</button>
  27.         <br />
  28.         <br />
  29.         <p>地区列表:</p>
  30.         <ul >
  31. <form action="javascript:;" >
  32.         <input type="text" name="uname" />
  33.         <br />
  34.         <input type="text" name="pwd" />
  35.         <br />
  36.         <input type="button"  value="提交" />
  37. </form></ul>
复制代码
2.2 数据提交


  • 常用请求方法
请求方法操作GET获取数据(默认请求方式)POST提交数据PUT修改数据(全部)DELETE删除数据PATCH修改数据(部分)

  • axios 如何提交数据到服务器
  1. axios({
  2.         url: "目标资源地址",
  3.         method: "请求方法",
  4.         data: {
  5.                 参数名: 值,
  6.         },
  7. }).then(result => {
  8.         // 对服务器返回的数据做后续处理
  9. });
复制代码

  • 示例:注册账号,提交用户名和密码到服务器保存
  1. <button><button>点击注册</button></button>
复制代码
4.png
2.3 axios 错误处理
  1. axios({
  2.         // ...请求选项
  3. })
  4.         .then(result => {
  5.                 // 处理成功数据
  6.         })
  7.         .catch(error => {
  8.                 // 处理失败错误
  9.         });
复制代码

  • 示例:
  1. <button><button>点击注册</button></button>
复制代码
5.png

2.4 案例-用户登录


  • 样式
  1. [/code]
  2. [list]
  3. [*]框架
  4. [/list][code]        <h3>欢迎-登录</h3>
  5.        
  6.        
  7.                
  8.        
  9.        
  10.        
  11.                 <form>
  12.                        
  13.                                 <label for="username" >账号名</label>
  14.                                 <input type="text"  />
  15.                        
  16.                        
  17.                                 <label for="password" >密码</label>
  18.                                 <input type="password"  />
  19.                        
  20.                         <button type="button" >登 录</button>
  21.                 </form>
  22.        
复制代码
2.5 form-serialize 插件

快速收集目标表单范围内表单元素的值


  • 引入 form-serialize 插件
  • 使用 serialize 函数

    • 参数 1:要获取的 form 表单标签对象(要求表单元素有 name 属性,用来作为收集的数据中属性名)
    • 参数 2:配置对象

      • hash:

        • true - 收集出来的是一个 JS 对象
        • false - 收集出来的是一个查询字符串

      • empty:

        • true - 收集空值
        • false - 不收集空值



  • 示例:收集登录表单里用户名和密码
  1. <form action="javascript:;" >
  2.         <input type="text" name="uname" />
  3.         <br />
  4.         <input type="text" name="pwd" />
  5.         <br />
  6.         <input type="button"  value="提交" />
  7. </form>
复制代码
2.6 Bootstrap 弹框

2.6.1 属性控制


  • 引入 bootstrap.css 和 bootstrap.js
  • 准备弹框标签,确认结构(可以从 Bootstrap 官方文档的 Modal 里复制基础例子)- 运行到网页后,逐一对应标签和弹框每个部分对应关系
  • 通过自定义属性,通知弹框的显示和隐藏,语法如下:
  1. <button data-bs-toggle="modal" data-bs-target="css选择器">显示弹框</button>
  2. <button data-bs-dismiss="modal">Close</button>
复制代码

  • 代码实现
  1. <button type="button"  data-bs-toggle="modal" data-bs-target=".mybox">显示弹框</button>
  2.        
  3.                
  4.                        
  5.                                 <h5 >Modal title</h5>
  6.                                 <button type="button"  data-bs-dismiss="modal" aria-label="Close"></button>
  7.                        
  8.                        
  9.                                 <p>Modal body text goes here.</p>
  10.                        
  11.                        
  12.                                 <button type="button"  data-bs-dismiss="modal">Close</button>
  13.                                 <button type="button" >Save changes</button>
  14.                        
  15.                
  16.        
复制代码
2.6.2 js 控制


  • 为什么需要 js 方式控制?

    • 当显示/隐藏之前,需要执行一些 JS 逻辑代码,就需要引入 JS 控制弹框显示/隐藏的方式

  • 例如:

    • 点击编辑姓名按钮,在弹框显示之前,在输入框填入默认姓名
    • 点击保存按钮,在弹框隐藏之前,获取用户填入的名字并打印

6.png


  • 语法
  1. // 创建弹框对象
  2. const modalDom = document.querySelector("css选择器");
  3. const modal = new bootstrap.Modal(modelDom);
  4. // 显示弹框
  5. modal.show();
  6. // 隐藏弹框
  7. modal.hide();
复制代码

  • 示例
  1. <button type="button" >编辑姓名</button>
  2.        
  3.                
  4.                        
  5.                                 <h5 >请输入姓名</h5>
  6.                                 <button type="button"  data-bs-dismiss="modal" aria-label="Close"></button>
  7.                        
  8.                        
  9.                                 <form action="">
  10.                                         姓名:
  11.                                         <input type="text"  />
  12.                                 </form>
  13.                        
  14.                        
  15.                                 <button type="button"  data-bs-dismiss="modal">取消</button>
  16.                                 <button type="button" >保存</button>
  17.                        
  18.                
  19.        
复制代码
2.7 案例-图书管理


  • 黑马接口文档
  • 结构
  1.        
  2.        
  3.                 <h3>图书管理</h3>
  4.                 <button type="button"  data-bs-toggle="modal" data-bs-target=".add-modal">
  5.                         + 添加
  6.                 </button>
  7.        
  8.        
  9.         <table >
  10.                 <thead >
  11.                         <tr>
  12.                                 <th >序号</th>
  13.                                 <th>书名</th>
  14.                                 <th>作者</th>
  15.                                 <th>出版社</th>
  16.                                 <th >操作</th>
  17.                         </tr>
  18.                 </thead>
  19.                 <tbody >
  20.                        
  21.                 </tbody>
  22.         </table>
  23.        
  24.        
  25.                
  26.                        
  27.                                 添加图书
  28.                                 <button type="button"  aria-label="Close" data-bs-dismiss="modal"></button>
  29.                        
  30.                        
  31.                                
  32.                                 <form >
  33.                                        
  34.                                                 <label for="bookname" >书名</label>
  35.                                                 <input type="text"  placeholder="请输入书籍名称" name="bookname" />
  36.                                        
  37.                                        
  38.                                                 <label for="author" >作者</label>
  39.                                                 <input type="text"  placeholder="请输入作者名称" name="author" />
  40.                                        
  41.                                        
  42.                                                 <label for="publisher" >出版社</label>
  43.                                                 <input type="text"  placeholder="请输入出版社名称" name="publisher" />
  44.                                        
  45.                                 </form>
  46.                        
  47.                        
  48.                                 <button type="button"  data-bs-dismiss="modal">取消</button>
  49.                                 <button type="button" >保存</button>
  50.                        
  51.                
  52.        
  53.        
  54.        
  55.                
  56.                        
  57.                                 编辑图书
  58.                                 <button type="button"  aria-label="Close" data-bs-dismiss="modal"></button>
  59.                        
  60.                        
  61.                                
  62.                                 <form >
  63.                                        
  64.                                         <input type="hidden"  name="id" />
  65.                                        
  66.                                                 <label for="bookname" >书名</label>
  67.                                                 <input type="text"  placeholder="请输入书籍名称" name="bookname" />
  68.                                        
  69.                                        
  70.                                                 <label for="author" >作者</label>
  71.                                                 <input type="text"  placeholder="请输入作者名称" name="author" />
  72.                                        
  73.                                        
  74.                                                 <label for="publisher" >出版社</label>
  75.                                                 <input type="text"  placeholder="请输入出版社名称" name="publisher" />
  76.                                        
  77.                                 </form>
  78.                        
  79.                        
  80.                                 <button type="button"  data-bs-dismiss="modal">取消</button>
  81.                                 <button type="button" >修改</button>
  82.                        
  83.                
  84.        
复制代码

  • index.js
  • 渲染图书列表
  1. /**
  2. * 目标1:渲染图书列表
  3. *  1.1 获取数据
  4. *  1.2 渲染数据
  5. */
  6. const creator = "老李";
  7. function getBooksList() {
  8.         // 1.1 获取数据
  9.         axios({
  10.                 url: "http://hmajax.itheima.net/api/books",
  11.                 params: {
  12.                         creator,
  13.                 },
  14.         }).then(result => {
  15.                 // console.log(result.data.data)
  16.                 // 1.2 渲染数据
  17.                 const list = result.data.data
  18.                         .map((item, index) => {
  19.                                 return `
  20.                 <tr>
  21.                     <td>${index + 1}</td>
  22.                     <td>${item.bookname}</td>
  23.                     <td>${item.author}</td>
  24.                     <td>${item.publisher}</td>
  25.                     <td data-id=${item.id}>
  26.                         删除
  27.                         编辑
  28.                     </td>
  29.                 </tr>
  30.             `;
  31.                         })
  32.                         .join("");
  33.                 document.querySelector(".list").innerHTML = list;
  34.         });
  35. }
  36. getBooksList();
复制代码

  • 新增图书
  1. /**
  2. * 目标2:新增图书
  3. *  2.1新增弹框->显示和隐藏
  4. *  2.2收集表单数据,并提交到服务器保存
  5. *  2.3刷新图书列表
  6. */
  7. const addModalDom = document.querySelector(".add-modal");
  8. const addModal = new bootstrap.Modal(addModalDom);
  9. // 2.1 新增弹框->显示和隐藏
  10. document.querySelector(".add-btn").addEventListener("click", () => {
  11.         // 2.2 获取输入框的数据
  12.         const addForm = document.querySelector(".add-form");
  13.         const formData = serialize(addForm, { hash: true, empty: true });
  14.         console.log(formData);
  15.         // 2.3 提交到服务器保存
  16.         axios({
  17.                 url: "http://hmajax.itheima.net/api/books",
  18.                 method: "post",
  19.                 data: {
  20.                         ...formData,
  21.                         creator,
  22.                 },
  23.         }).then(result => {
  24.                 console.log(result);
  25.                 // 2.4 重新渲染页面
  26.                 getBooksList();
  27.                 // 重置表单
  28.                 addForm.reset();
  29.                 // 点击保存,隐藏模态框
  30.                 addModal.hide();
  31.         });
  32. });
复制代码

  • 删除图书
  1. /**
  2. * 目标3:删除图书
  3. *  3.1删除元素绑定点击事件->获取图书id
  4. *  3.2调用删除接口
  5. *  3.3刷新图书列表
  6. */
  7. // 3.1 删除元素绑定点击事件(事件委托)->获取图书id
  8. document.querySelector(".list").addEventListener("click", e => {
  9.         if (e.target.classList.contains("del")) {
  10.                 const theId = e.target.parentNode.dataset.id;
  11.                 // 3.2 调用删除接口
  12.                 axios({
  13.                         url: `http://hmajax.itheima.net/api/books/${theId}`,
  14.                         method: "delete",
  15.                 }).then(() => {
  16.                         // 3.3 刷新图书列表
  17.                         getBooksList();
  18.                 });
  19.         }
  20. });
复制代码

  • 编辑图书
  1. /**
  2. * 目标4:编辑图书
  3. *  4.1编辑弹框->显示和隐藏
  4. *  4.2获取当前编辑图书数据->回显到编辑表单中
  5. *  4.3提交保存修改,并刷新列表
  6. */
  7. const editModalDom = document.querySelector(".edit-modal");
  8. const editModal = new bootstrap.Modal(editModalDom);
  9. document.querySelector(".list").addEventListener("click", e => {
  10.         if (e.target.classList.contains("edit")) {
  11.                 const theId = e.target.parentNode.dataset.id;
  12.                 // 4.2 获取当前编辑图书数据->回显到编辑表单中
  13.                 axios({
  14.                         url: `http://hmajax.itheima.net/api/books/${theId}`,
  15.                         method: "get",
  16.                 }).then(result => {
  17.                         // 数据对象"属性"和标签"类名"一致
  18.                         // 遍历数据对象,使用属性去获取对应的标签,快速赋值
  19.                         const bookObj = result.data.data;
  20.                         // console.log(bookObj)
  21.                         const keys = Object.keys(bookObj);
  22.                         keys.forEach(key => {
  23.                                 document.querySelector(`.edit-form .${key}`).value = bookObj[key];
  24.                         });
  25.                 });
  26.                 // 4.1 编辑弹框->显示和隐藏
  27.                 editModal.show();
  28.         }
  29. });
  30. document.querySelector(".edit-btn").addEventListener("click", () => {
  31.         const editForm = document.querySelector(".edit-form");
  32.         const editData = serialize(editForm, { hash: true, empty: true });
  33.         // 4.3 提交保存修改,并刷新列表
  34.         axios({
  35.                 url: `http://hmajax.itheima.net/api/books/${editData.id}`,
  36.                 method: "put",
  37.                 data: {
  38.                         ...editData,
  39.                         creator,
  40.                 },
  41.         }).then(() => {
  42.                 getBooksList();
  43.         });
  44.         editModal.hide();
  45. });
复制代码

  • 总结

    • 渲染列表(查)

      • 获取数据
      • 渲染数据

    • 新增图书(增)

      • 弹框(显示/隐藏)
      • 收集数据&提交保存
      • 刷新页面列表

    • 删除图书(删)

      • 绑定点击事件(获取要删除的图书 id)
      • 调用删除接口(让服务器删除此数据)
      • 成功后重新获取并刷新列表

    • 编辑图书(改)

      • 弹框(显示/隐藏)
      • 表单(数据回显)
      • 点击修改收集数据,提交到服务器保存
      • 重新获取并刷新列表


2.8 图片上传

把本地的图片上传到网页上显示


  • 实现步骤

    • 获取图片文件对象:e.target.files[0]
    • 使用 FormData 表单数据对象装入
      1. const fd = new FormData();
      2. fd.append(参数名, 值);
      复制代码
    • 提交表单数据对象,使用服务器返回图片 url 网址

  1. <input type="file"  />
  2. <img src="" alt="" />
复制代码

  • 示例:更换背景图片
  1.        
  2.                
  3.                         <ul>
  4.                                 <li>免费教程</li>
  5.                                 <li>原创书籍</li>
  6.                                 <li>
  7.                                         教研团队
  8.                                 </li>
  9.                                 <li>
  10.                                        
  11.                                                 校区汇总
  12.                                        
  13.                                 </li>
  14.                                 <li>报名流程</li>
  15.                                 <li>项目信息站</li>
  16.                                 <li>技术社区</li>
  17.                         </ul>
  18.                
  19.                
  20.                         <label for="bg">更换背景</label>
  21.                         <input  type="file" id="bg" />
  22.                
  23.        
  24.        
  25.                 <img src="https://www.itheima.com/images/logo.png" alt="" />
  26.                
  27.                         <input type="text" />
  28.                         <button>搜索一下</button>
  29.                
  30.        
复制代码

  • index.js
  1. document.querySelector(".bg-ipt").addEventListener("change", e => {
  2.         // 1. 选择图片上传,设置body背景
  3.         const fd = new FormData();
  4.         fd.append("img", e.target.files[0]);
  5.         axios({
  6.                 url: "http://hmajax.itheima.net/api/uploadimg",
  7.                 method: "post",
  8.                 data: fd,
  9.         }).then(result => {
  10.                 // console.log(result)
  11.                 const imgUrl = result.data.data.url;
  12.                 document.body.style.backgroundImage = `url(${imgUrl})`;
  13.                 // 2. 上传成功时,"保存"图片url网址
  14.                 localStorage.setItem("bgImg", imgUrl);
  15.         });
  16. });
  17. // 3. 网页运行后,获取url网址使用
  18. const imgUrl = localStorage.getItem("bgImg");
  19. document.body.style.backgroundImage = `url(${imgUrl})`;
复制代码
2.9 案例-个人信息设置


  • 结构
  1.    
  2.         
  3.             操作成功
  4.         
  5.    
  6.     <ul >
  7.         <li >基本设置</li>
  8.         <li>安全设置</li>
  9.         <li>账号绑定</li>
  10.         <li>新消息通知</li>
  11.     </ul>
  12.    
  13.         
  14.             <h3 >基本设置</h3>
  15.             <form  action="javascript:;">
  16.                
  17.                     <label for="email">邮箱</label>
  18.                     <input id="email" name="email"  type="text" placeholder="请输入邮箱" autocomplete="off">
  19.                
  20.                
  21.                     <label for="nickname">昵称</label>
  22.                     <input id="nickname" name="nickname"  type="text" placeholder="请输入昵称" autocomplete="off">
  23.                
  24.                
  25.                     <label>性别</label>
  26.                     <label ><input type="radio" name="gender"  value="0">男</label>
  27.                     <label ><input type="radio" name="gender"  value="1">女</label>
  28.                
  29.                
  30.                     <label for="desc">个人简介</label>
  31.                     <textarea id="desc" name="desc"  placeholder="请输入个人简介" cols="20" rows="10" autocomplete="off"></textarea>
  32.                
  33.                 <button >提交</button>
  34.             </form>
  35.         
  36.         
  37.             <h4 >头像</h3>
  38.             <img  src="https://www.cnblogs.com/./img/头像.png" alt="">
  39.             <label for="upload">更换头像</label>
  40.             <input id="upload" type="file" >
  41.         
  42.    
复制代码

  • index.js
  • 信息渲染
  1. /**
  2. * 目标1:信息渲染
  3. *  1.1 获取用户的数据
  4. *  1.2 回显数据到标签上
  5. * */
  6. const creator = "小明";
  7. axios({
  8.         url: "http://hmajax.itheima.net/api/settings",
  9.         params: {
  10.                 creator,
  11.         },
  12. }).then(result => {
  13.         // console.log(result.data.data)
  14.         const userObj = result.data.data;
  15.         const keys = Object.keys(userObj);
  16.         keys.forEach(key => {
  17.                 // 头像和性别比较特殊,需要单独处理
  18.                 if (key === "avatar") {
  19.                         document.querySelector(".prew").src = userObj[key];
  20.                 } else if (key === "gender") {
  21.                         const gRadioList = document.querySelectorAll(".gender");
  22.                         // 0男,1女,刚好与数组下标对应
  23.                         const gNum = userObj[key];
  24.                         gRadioList[gNum].checked = true;
  25.                 } else {
  26.                         document.querySelector(`.${key}`).value = userObj[key];
  27.                 }
  28.         });
  29. });
复制代码

  • 修改头像
  1. /**
  2. * 目标2:修改头像
  3. *  2.1 获取头像文件
  4. *  2.2 提交服务器并更新头像
  5. */
  6. document.querySelector(".upload").addEventListener("change", e => {
  7.         const fd = new FormData();
  8.         fd.append("img", e.target.files[0]);
  9.         fd.append("creator", creator);
  10.         axios({
  11.                 url: "http://hmajax.itheima.net/api/avatar",
  12.                 method: "put",
  13.                 data: fd,
  14.         }).then(result => {
  15.                 document.querySelector(".prew").src = result.data.data.avatar;
  16.         });
  17. });
复制代码

  • 修改数据,并提示
  1. /**
  2. * 目标3:提交表单
  3. *  3.1 收集表单信息
  4. *  3.2 交到服务器保存
  5. */
  6. /**
  7. * 目标4:结果提示
  8. *  4.1 创建toast对象
  9. *  4.2 调用show方法->显示提示框
  10. */
  11. document.querySelector(".submit").addEventListener("click", () => {
  12.         // 3.1 收集表单信息
  13.         const form = document.querySelector(".user-form");
  14.         const formData = serialize(form, { hash: true, empty: true });
  15.         formData.creator = creator;
  16.         formData.gender = +formData.gender;
  17.         // 3.2 提交到服务器保存
  18.         axios({
  19.                 url: "http://hmajax.itheima.net/api/settings",
  20.                 method: "put",
  21.                 data: formData,
  22.         }).then(result => {
  23.                 // 4.1 创建toast对象
  24.                 const toastDom = document.querySelector(".my-toast");
  25.                 const toast = new bootstrap.Toast(toastDom);
  26.                 // 4.2 调用show方法->显示提示框
  27.                 toast.show();
  28.         });
  29. });
复制代码
2.10 请求方式别名


  • 为了方便起见,已经为所有支持的请求方法提供了别名
  1. axios.request(config)
  2. axios.get(url[, config])
  3. axios.delete(url[, config])
  4. axios.head(url[, config])
  5. axios.options(url[, config])
  6. axios.post(url[, data[, config]])
  7. axios.put(url[, data[, config]])
复制代码

  • 注:在使用别名方法时, url、method、data 这些属性都不必在配置中指定
2.11 Axios API

2.11.1 axios 实例

可以使用自定义配置新建一个实例
  1. const instance = axios.create({
  2.         baseURL: "https://some-domain.com/api/",
  3.         timeout: 1000,
  4.         headers: { "X-Custom-Header": "foobar" },
  5. });
复制代码

  • 一些实例方法

    • axios#request(config)
    • axios#get(url[, config])
    • axios#delete(url[, config])
    • axios#head(url[, config])
    • axios#options(url[, config])
    • axios#post(url[, data[, config]])
    • axios#put(url[, data[, config]])
    • axios#patch(url[, data[, config]])
    • axios#getUri([config])

2.11.2 请求配置


  • 这些是创建请求时可以用的配置选项,只有url是必需的
  • 若没指定method,请求默认使用GET
  1. {
  2.   // url:用于请求的服务器URL
  3.   url: '/user',
  4.   // method:创建请求时使用的方法,默认为get
  5.   method: 'get',
  6.   // baseURL:自动加在url前面,通过它可以传递相对地址
  7.   baseURL: 'https://some-domain.com/api/',
  8.   // transformRequest:允许在向服务器发送前,修改请求数据
  9.   // 它只能用于'PUT', 'POST'和'PATCH'这几个请求方法
  10.   // 数组中最后一个函数必须返回一个字符串, 一个Buffer实例,ArrayBuffer,FormData或Stream
  11.   // 可以修改请求头
  12.   transformRequest: [function (data, headers) {
  13.     // 对发送的 data 进行任意转换处理
  14.     return data;
  15.   }],
  16.   // transformResponse:在传递给then/catch前,允许修改响应数据
  17.   transformResponse: [function (data) {
  18.     // 对接收的 data 进行任意转换处理
  19.     return data;
  20.   }],
  21.   // 自定义请求头
  22.   headers: {'X-Requested-With': 'XMLHttpRequest'},
  23.   // params:与请求一起发送的URL参数
  24.   // 必须是一个简单对象或URLSearchParams对象
  25.   params: {
  26.     ID: 12345
  27.   },
  28.   // data:作为请求体被发送的数据
  29.   // 仅适用'PUT', 'POST', 'DELETE'和'PATCH'请求方法
  30.   // 在没有设置`transformRequest`时,则必须是以下类型之一:
  31.   // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
  32.   // - 浏览器专属: FormData, File, Blob
  33.   // - Node 专属: Stream, Buffer
  34.   data: {
  35.     firstName: 'Fred'
  36.   },
  37.   // 发送请求体数据的可选语法
  38.   // 请求方式 post
  39.   // 只有 value 会被发送,key 则不会
  40.   data: 'Country=Brasil&City=Belo Horizonte',
  41.   // timeout:指定请求超时的毫秒数
  42.   // 如果请求时间超过`timeout`的值,则请求会被中断,默认为0,表示永不超时
  43.   timeout: 1000,
  44.   // withCredentials:表示跨域请求时是否需要使用凭证,默认false
  45.   withCredentials: false,
  46.   // adapter:允许自定义处理请求,这使测试更加容易
  47.   // 返回一个`promise`并提供一个有效的响应(参见 lib/adapters/README.md)
  48.   adapter: function (config) {
  49.     /* ... */
  50.   },
  51.   // auth:HTTP Basic Auth
  52.   auth: {
  53.     username: 'janedoe',
  54.     password: 's00pers3cret'
  55.   },
  56.   // responseType:浏览器将要响应的数据类型
  57.   // 选项包括: 'arraybuffer', 'document', 'json', 'text', 'stream'
  58.   // 浏览器专属:'blob'
  59.   responseType: 'json', // 默认值
  60.   // responseEncoding:用于解码响应的编码 (Node.js专属)
  61.   // 注意:忽略`responseType`的值为 'stream',或者是客户端请求
  62.   responseEncoding: 'utf8', // 默认值
  63.   // `xsrfCookieName`是`xsrf token`的值,被用作`cookie`的名称
  64.   xsrfCookieName: 'XSRF-TOKEN', // 默认值
  65.   // `xsrfHeaderName`是带有`xsrf token`值的http请求头名称
  66.   xsrfHeaderName: 'X-XSRF-TOKEN', // 默认值
  67.   // `onUploadProgress`允许为上传处理进度事件(浏览器专属)
  68.   onUploadProgress: function (progressEvent) {
  69.     // 处理原生进度事件
  70.   },
  71.   // `onDownloadProgress`允许为下载处理进度事件(浏览器专属)
  72.   onDownloadProgress: function (progressEvent) {
  73.     // 处理原生进度事件
  74.   },
  75.   // `maxContentLength`定义了node.js中允许的HTTP响应内容的最大字节数
  76.   maxContentLength: 2000,
  77.   // `maxBodyLength`(仅Node)定义允许的http请求内容的最大字节数
  78.   maxBodyLength: 2000,
  79.   // `validateStatus`定义了对于给定的HTTP状态码是 resolve 还是 reject promise
  80.   // 返回`true`(或者设置为`null`或`undefined`),则promise将会resolved,否则是rejected
  81.   validateStatus: function (status) {
  82.     return status >= 200 && status < 300; // 默认值
  83.   },
  84.   // maxRedirects:定义了在node.js中要遵循的最大重定向数,设置为0,则不会进行重定向
  85.   maxRedirects: 5, // 默认值
  86.   // `socketPath` 定义了在node.js中使用的UNIX套接字
  87.   // e.g. '/var/run/docker.sock' 发送请求到 docker 守护进程
  88.   // 只能指定 `socketPath` 或 `proxy`
  89.   // 若都指定,则使用 `socketPath`
  90.   socketPath: null, // default
  91.   // `httpAgent`和`httpsAgent`分别定义了在 node.js 中执行 http 和 https 请求时使用的自定义代理
  92.   // 这样就可以添加默认情况下未启用的选项,如`keepAlive`
  93.   httpAgent: new http.Agent({ keepAlive: true }),
  94.   httpsAgent: new https.Agent({ keepAlive: true }),
  95.   // `proxy` 定义了代理服务器的主机名,端口和协议
  96.   // 可以使用常规的`http_proxy`和`https_proxy` 环境变量
  97.   // 使用`false`可以禁用代理功能,同时环境变量也会被忽略
  98.   // `auth`表示应使用HTTP Basic auth连接到代理,并且提供凭据
  99.   // 这将设置一个`Proxy-Authorization`请求头,它会覆盖`headers`中已存在的自定义`Proxy-Authorization`请求头
  100.   // 如果代理服务器使用 HTTPS,则必须设置 protocol 为`https`
  101.   proxy: {
  102.     protocol: 'https',
  103.     host: '127.0.0.1',
  104.     port: 9000,
  105.     auth: {
  106.       username: 'mikeymike',
  107.       password: 'rapunz3l'
  108.     }
  109.   },
  110.   // 详见https://axios-http.com/zh/docs/cancellation
  111.   cancelToken: new CancelToken(function (cancel) {
  112.   }),
  113.   // `decompress`:表示是否要自动解压缩响应正文
  114.   // 将其设置为"false",它不会解压缩响应,并会保留原始的"Content-Encoding"标头
  115.   // 如果设置为“true”,将从所有解压缩响应的响应对象中移除"Content-Encoding"标头
  116.   // - 仅适用于Node (XHR 无法关闭解压缩功能)
  117.   decompress: true // 默认值
  118. }
复制代码
2.11.3 响应结构


  • 一个请求的响应包含以下信息
  1. {
  2.   // data:由服务器提供的响应
  3.   data: {},
  4.   // status:来自服务器响应的 HTTP 状态码
  5.   status: 200,
  6.   // statusText:来自服务器响应的 HTTP 状态信息
  7.   statusText: 'OK',
  8.   // headers:服务器响应头
  9.   // 所有 header 名称都是小写,且可以使用方括号语法访问
  10.   // 例如: `response.headers['content-type']`
  11.   headers: {},
  12.   // config:是`axios`请求的配置信息
  13.   config: {},
  14.   // request:是生成此响应的请求
  15.   // 在node.js中它是最后一个ClientRequest实例 (in redirects),
  16.   // 在浏览器中则是 XMLHttpRequest 实例
  17.   request: {}
  18. }
复制代码
2.11.4 默认配置


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
7.jpg
8.png
您需要登录后才可以回帖 登录 | 立即注册