Ajax--- Ajax & axios

119 阅读5分钟

服务器相关的基础概念

服务器

服务器的本质:也是一台电脑。作用:存储一个网站的文件(HTML、CSS、JS、图片、音乐.....),提供网站的文件给用户

资源

通俗的讲,我们浏览网页时,从网络当中看到的内容都叫做资源

数据也是资源

网页中的数据,也是服务器对外提供的一种资源。例如股票数据、各行业排行榜等

数据

服务器存储数据的方式,多数会用数据表的形式来储存

客户端

在前端开发中,客户端特指“Web 浏览器”,它可以将互联网世界中的 Web 资源加载、并呈现到浏览器窗口中供用户使用

URL 地址(统一资源定位符)

URL 地址,表示服务器上每个资源的确切位置,服务器上的每个资源,都对应着独一无二的URL地址。对数据的操作(增删改查),也对应着不同的URL地址

客户端与服务器通信的过程

客户端与服务器之间的通信过程,分为请求 - 响应两个步骤。其中:

  • 请求的概念:客户端通过网络去找服务器要资源的过程,叫做请求
  • 响应的概念:服务器把资源通过网络发送给客户端的过程,叫做响应

什么是 Ajax

Ajax 是浏览器中的技术:用来实现客户端网页请求服务器的数据,英文全称是 Asynchronous Javascript And XML,简称 Ajax,网页中 Ajax 的应用场景无处不在,有数据的地方就有 Ajax

axios

axios是前端圈最火的、专注于数据请求的库

      axios({
        method: "请求类型",
        url: "请求的资源地址",
      // .then固定写法,是axios封装的一个代码,意思是服务器把数据返回了,then里面的代码就会被触发
      }).then((result) => {
        // then 用来指定请求成功之后的回调函数
		// 形参中的 result 是请求成功之后的结果
	     console.log(result); // 查看请求结果
      });

请求方式

Ajax中,客户端浏览器在请求服务器上的数据时,根据**操作性质(增删改查)**的不同,可以分为以下 5 种常见的操作

GET 请求

GET 请求用于从服务器获取数据

        method: "get",
        // 完整写法请查看 axios描述

GET 请求的查询参数

      axios({
        method: "get",
        url: "资源地址",
          
        // 请求的查询参数 
        params:{
            
        // 1. 如果想指定查询的条件,可以通过 params 选项来指定查询的参数
        // 2. 指定参数的代码写法必须要写在 params 对象中,并且以键值对的形式存在,即 属性:属性值
        // 3. params 对象中,写什么样的键值对,规定要由后端来决定,前端不可随意自定义命名
            id:5913 // 根据id来查询指定的数据(后端已经做好了这个功能才能查询到)
        
        // 4. 输入多个键值对来获取指定数据(精确的查找)
            id:5913,
            bookname:"水浒传",
            author:"施耐庵"
         // 5. 输入多个键值对时,需要注意键值对的值一定要正确,否则什么都不会返回
         // 6. get请求传参第二种传参方式:url: "资源地址?id:5913&bookname:"水浒传""   ?后面接上键值对
        }
    
      }).then((result) => {
	     console.log(result);
      });

简写-GET 请求

       // axios.get(url) 固定写法
       // axios.get(Url,{params:{{参数}})
	  axios.get("url").then((result) => {});

get请求-浏览器地址栏

直接在浏览器的地址栏输入接口地址来访问数据,这种方式也属于get请求

POST 请求

POST 请求用于向服务器新增数据

        method: "post",
        // 完整写法请查看 axios描述

发起 POST 请求

      axios({
        method: "post",
        url: "资源地址",
        // 请求体
      	data:{
          bookname: '三国演义',
          author: '罗贯中',
          publisher: '上海出版社',
        // 不能随意命名添加数据,必须按照规范来添加
        }
      }).then((result) => {
	     console.log(result);
      });

简写-POST 请求

      // axios.post(url,参数(对象));
      // axios.post(url,参数(字符串格式));
        axsio
          .post("资源地址", {
            bookname: "《静夜思》",
            author: "李白",
            publisher: "唐朝",
            appkey: "hdj1232",
          })
          .then((result) => {
            console.log(result);
          });

DELETE 请求

DELETE 请求用于删除服务器上的数据

        method: "delete",
        // 完整写法请查看 axios描述

PUT 请求

PUT 请求用于更新服务器上的数据(侧重于完整更新:例如更新用户的完整信息)

    method: "put",
    // 完整写法请查看 axios描述

PATCH 请求

PATCH 请求用于更新服务器上的数据(侧重于部分更新:例如只更新用户的手机号)

	method: "patch",
	// 完整写法请查看 axios描述

接口相关的基础概念

组成部分说明
接口名称接口的名称,用来快速区分每个接口的作用。如:登录接口、添加图书接口
接口 URL客户端发起 Ajax 调用此接口时,请求的 URL 地址
请求方式接口的请求方式,如:GET、POST、PUT、DELETE 等
请求参数请求此接口时,需要发送到服务器的查询参数或请求体
返回示例当接口请求成功后,服务器响应回来的数据的基本格式
返回参数说明接口响应结果的详细描述

易错点查询建议

image-20220425221804837

network面板

开发或学习时,遇到ajax方面的错误,可以使用浏览器的 network 面板,来帮助我们更方便的排查错误。该工具可以抓取到所有的网络请求,当然包括ajax请求,我们可以使用该工具看当前Ajax的请求方式请求的URL地址请求参数响应结果

image-20220425223640845

拓展

confirm确认框

JS中自带的确认框(confirm),绑定按钮点击事件会返回true和false

  <body>
    <button>删除</button>
    <script>
      document.querySelector('button').addEventListener('click', function () {
        if (confirm('是否执行删除?')) {
          // 点击确认 返回yrue
          console.log('可以删除');
        } else {
          // 点击取消 返回false
          console.log('取消删除');
        }
      });
    </script>
  </body>

快速获取form表单所有数据

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>13-快速获取到form表单所有数据.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      input[name] {
        /* <input type="text" name="username" /> */
        /* 表示选择到了 有name属性的input标签 */
        background-color: red;
      }
    </style>
  </head>
  <body>
    <form class="f1">
      <input value="111" type="text" name="username" />
      <input value="222" type="text" name="password" />
      <input value="333" type="text" name="address" />
      <input value="444" type="text" name="phone" />
      <input type="text" />
      <input type="text" />
      <input type="text" />
      <button type="button">注册数据</button>
    </form>

    <form class="f2" action="">
      <input type="text" name="nickname" value="aabbcc" />
    </form>
    <script>
      // 获取表单1 数据 对象格式
      const obj1 = getForm('.f1');
      // 获取表单2 数据 对象格式
      const obj2 = getForm('.f2');

      // query 只能传入 form标签的选择器
      function getForm(query) { // 在定义函数的时候写形参 - 名字都可以随意改 
        // 使用CSS中的属性选择器  	获取所有带有name属性的input标签
        const inputs = document.querySelectorAll(query + ' input[name]');
        // .f1 = 传入参数修改的值(query) 后期谁调用  就输入谁的对应参数
        // const inputs = document.querySelectorAll('.f1 input[name]');
        const obj = {};
        // 对伪数组进行遍历  
        // obj["a"] = 1; // 输出 {a:1}
        // obj["c"] = 2; // 输出 {c:2}
        inputs.forEach((dom) => {
          // 添加新属性
          obj[dom.name] = dom.value;
          //   dom.name = 属性名  dom.value = 属性值
        });
        return obj;
      }
    </script>
  </body>
</html>