Vue 框架前导:详解 Ajax

Ajax

Ajax 是异步的 JavaScript 和 XML。简单来说就是使用 XMLHttpRequest 对象和服务器通信。可以使用 JSON、XML、HTML 和 text 文本格式来发送和接收数据。具有异步的特性,可在不刷新页面的情况下实现和服务器的通信,交换数据或者更新页面

01. 体验 Ajax

使用 axios 库,与服务器之间进行数据通信,这个库就是基于上面提到的 XMLHttpRequest 的封装,代码简洁,在后面的 Vue、React 项目中都会使用到这个库。

  1. 引入 axios.jx :https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js

  2. 使用 axios 函数来实现请求和接收数据

    axios({
    	url: '请求的资源地址'
    }).then((result)=> {
    	对数据的处理;
    })
    

案例:使用 Ajax 来发送请求获取省份信息并且将其展示在页面上:

<body>
    <!-- 
        axios库地址: https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js
        省份数据地址: http://ajax-api.itheima.net/api/province
    -->
    <p></p>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <script>
        const p = document.querySelector('p');
        axios({
            url: "http://ajax-api.itheima.net/api/province"
        }).then(result => {
            console.log(result);
            p.innerHTML = result.data.data.join('<br>');
        })
        
    </script>
</body>

可以多使用 console.log() 语句来检查返回的数据类型

02. 认识 URL

URL:统一资源定位符,速成网页地址,简称网址,是因特网上标准的资源的地址。

URL 的组成

2.1 协议

在计算机科学和网络通信领域,协议(Protocol)是一组规则和约定,用于在计算机系统之间进行通信和数据交换。它定义了通信双方的行为规范,以便在网络中传输数据、执行操作或完成特定任务;协议通常描述了通信的格式、序列、错误检测、数据压缩、加密和身份验证等方面的规则。它们为通信设备和程序之间的互操作性提供了基础,并确保数据的可靠传输和正确处理。

http 协议:超文本传输协议,规定浏览器和服务器之间传输数据的格式

2.2 域名

域名(Domain Name)是互联网中用于识别和定位计算机或网络服务的人类可读的名称。它是互联网上的网站、服务器或其他资源的地址标识;域名通常由多个部分组成,以点号 . 分隔。例如,在域名 example.com 中,example 是二级域名,.com 是顶级域名(TLD)。域名可以有不同层次的子域,例如 www.example.com 中的 www 是三级子域。

一些常见的顶级域名包括:

  • 通用顶级域名(gTLD):如 .com(商业)、.org(非营利组织)、.net(网络服务)等。
  • 国家和地区代码顶级域名(ccTLD):如 .cn(中国)、.uk(英国)、.jp(日本)等,代表特定国家或地区。

标记服务器在浏览器中的方位

2.3 资源路径

标记资源在服务器中的具体位置,根据这个请求去访问后端不同的组件或者资源

2.4 URL 查询参数

浏览器提供给服务器的额外信息,让服务器返回浏览器想要的数据

语法:http://xxx.com/xxx/xxx?参数名1=值1&参数名2=值2

但真实这样写的话容易出现错误,这里来看 axios 提供给我们的添加查询参数的方式:

axios({
  url: '请求地址',
  // 查询参数
  params: {
    参数名: '参数'
  }
}).then(result => {
  数据处理;
})

案例:向请求地址中发送带参数的请求实现查询省份的市

<body>
  <p></p>
  <!-- 
    城市列表: http://hmajax.itheima.net/api/city
    参数名: pname
    : 省份名字
  -->
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    const p = document.querySelector('p');
    axios({
      url: 'http://hmajax.itheima.net/api/city',
      // 查询参数
      params: {
        pname: '河北省'
      }
    }).then(result => {
      console.log(result.data.list.join('<br>'));
      p.innerHTML = result.data.list.join('<br>');
    })
  </script>
</body>

比如上面的方式实际上就是给服务器发送了一个 GET 请求,并且携带了参数,参数名为 pname 参数值为我们查询的省份,上面是 河北省 ,当后端接收到这个请求后就会返回我们需要的数据

2.4 案例

根据省份和城市的名字来查询地址列表,省份和城市需要用户自己输入

显示效果:

<body>
  <div class="container">
    <form id="editForm" class="row">
      <!-- 输入省份名字 -->
      <div class="mb-3 col">
        <label class="form-label">省份名字</label>
        <input type="text" value="北京" name="province" class="form-control province" placeholder="请输入省份名称" />
      </div>
      <!-- 输入城市名字 -->
      <div class="mb-3 col">
        <label class="form-label">城市名字</label>
        <input type="text" value="北京市" name="city" class="form-control city" placeholder="请输入城市名称" />
      </div>
    </form>
    <button type="button" class="btn btn-primary sel-btn">查询</button>
    <br><br>
    <p>地区列表: </p>
    <ul class="list-group">
      <!-- 示例地区 -->
      <li class="list-group-item">东城区</li>
    </ul>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    /*
      获取地区列表: http://hmajax.itheima.net/api/area
      查询参数:
        pname: 省份或直辖市名字
        cname: 城市名字
    */
    const btn = document.querySelector('.sel-btn')
    btn.addEventListener('click', function() {
      const province = document.querySelector('.province').value;
      const city = document.querySelector('.city').value;
      const ur = document.querySelector('.list-group');
      axios({
        url: 'http://hmajax.itheima.net/api/area',
        params: {
          pname: province,
          cname: city
        }
      }).then(result => {
        const NewArr = result.data.list.map(function(ele) {
          return `<li class="list-group-item">${ele}</li>`;
        })
        ur.innerHTML = NewArr;
      })
    })
  </script>
</body>

请求除北京以外的其他地址可能有问题,保证自己能够学会如何发送多参数的请求即可

03. 常用的请求方法

对服务器的资源,要执行的操作

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

可以理解为给后端传递的某种标识,后端开发人员在得到这个标识后就知道了你想做什么操作,由此来书写逻辑

3.1 axios 请求配置

  1. url 请求的 URL 地址
  2. method 请求的方法,GET 为默认请求方法
  3. data 提交的数据

案例:实现注册功能,向服务器提供账号和密码,在控制台打印出返回的信息

<body>
  <button class="btn">注册用户</button>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    /*
      注册用户: http://hmajax.itheima.net/api/register
      请求方法: POST
      参数名:
        username: 用户名 (中英文和数字组成, 最少8位)
        password: 密码 (最少6位)

      目标: 点击按钮, 通过axios提交用户和密码, 完成注册
    */
   document.querySelector('button').addEventListener('click', () => {
    axios({
      url: 'http://hmajax.itheima.net/api/register',
      method: 'post',
      params: {
        username: 'kq',
        password: '123456'
      }
   }).then(result => {
      console.log(result);
   })
   })
  </script>
</body>

04. axios 的错误处理

在网络通信中,错误信息与正常信息通常可以通过 HTTP 响应的状态码(Status Code)来区分。HTTP 状态码是服务器向客户端返回的一个三位数字代码,表示服务器对请求的处理结果。

语法:在 then 方法的后面,调用 catch 方法,传入回调函数并且定义形参

axios({
  url: '请求地址',
  // 查询参数
  params: {
    参数名: '参数'
  }
}).then(result => {
  数据处理;
}).catch(error => {
	错误处理; 
})
<body>
  <button class="btn">注册用户</button>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    /*
      注册用户: http://hmajax.itheima.net/api/register
      请求方法: POST
      参数名:
        username: 用户名 (中英文和数字组成, 最少8位)
        password: 密码 (最少6位)

      目标: 点击按钮, 通过axios提交用户和密码, 完成注册
    */
   document.querySelector('.btn').addEventListener('click', () => {
    axios({
      url: 'http://hmajax.itheima.net/api/register',
      // 指定请求方法
      method: 'post',
      data: {
        username: 'itheima007',
        password: '7654321'
      }
    }).then(result => {
      console.log(result)
    }).catch(error => {
      alert(error.response.data.message);
    })
   })
  </script> 
</body>

05. HTTP 报文

HTTP 协议规定了浏览器发送以及服务器返回的内容的格式,而请求报文就是浏览器按照 HTTP 协议要求的格式,发送给服务器的内容

5.1 请求报文的格式

请求报文的组成部分有:

  1. 请求行:带有请求方法、URL 和协议的信息
  2. 请求头:以键值对的格式携带的信息
  3. 空行:分割请求头,空行之后是发送给服务器的资源
  4. 请求体:发送的资源

比如上面案例中发送的请求可以通过控制台中的网络模块清晰的看到

请求行和请求头:

请求体:

分别是在标头部分和载荷部分通过查看源代码的方式显示出来的

5.2 错误排查

可以通过查看请求报文中的信息来排查错误,看看是否是因为代码逻辑导致请求信息有问题

5.3 响应报文

响应报文就是服务器按照 HTTP 协议的要求的格式,返回给浏览器的内容

响应报文的组成部分有:

  1. 请求行(状态行):协议、HTTP 响应状态码、状态信息
  2. 响应头:以键值对的格式携带的附加信息
  3. 空行:分割响应头,空行之后是服务器返回的资源
  4. 响应体:返回的资源

响应报文中另外一个需要了解的是响应状态码

状态码说明
1xx信息
2xx成功
3xx重定向消息
4xx客户端出现的错误(比如浏览器)
5xx服务端出现的错误(比如后端代码中的逻辑错误)

06.接口文档

描述接口的文章,接口就是我们使用 Ajax 与服务器通讯的时候,使用 URL、请求方法以及携带的参数。

比如上面讲到的请求城市列表的案例,它的接口文档就是这样的

前后端的开发都依靠这个接口文档进行,前端开发用于明确请求参数、请求地址和返回的信息然后将它们展示出来,后端开发根据这个接口文档去书写不同的方法,来接收请求、实现业务逻辑和返回信息。

07. form-serialize 插件

这个插件可以帮助我们快速的收集表单元素的值;

在前面写获取表单数据的时候,要一个个去获取表单中的元素和获取它们的值,通过这个插件可以帮助我们简化这个步骤

<body>
  <form action="javascript:;" class="example-form">
    <input type="text" name="uname">
    <br>
    <input type="text" name="pwd">
    <br>
    <input type="button" class="btn" value="提交">
  </form>
  <!-- 
    目标:在点击提交时,使用form-serialize插件,快速收集表单元素值
  -->
  <!--引入 js 文件-->
  <script src="./lib/form-serialize.js"></script>
  <script>
    document.querySelector('.btn').addEventListener('click', () => {
      const data = serialize(document.querySelector('.example-form'),
      { hash: true,empty: true});
      console.log(data);
    })
  </script>
</body>
  1. 引入 form-seralize 文件:我们实际上是去调用这个插件暴露给我们的 seralize 方法
  2. 调用方法传递参数,参数有
    1. 我们需要处理的表单对象
    2. 配置对象:hash 设置获取的数据结构(获取的是 js 对象还是查询字符串)、empty 设置是否获取空值
  3. 获取返回结果
    1. 如果 hash 设置的是 true 则获得一个 js 对象
    2. 如果 hash 设置为 false 获取的是查询字符串

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

比如在上面的案例中,获取到的就是这样一个对象,对象的属性名为表单项设置的 name 属性

实际开发中 name 属性根据接口文档来设置,hashempty 均设置为 true

07. 图片上传

  1. 获取图片文件对象:当我们上传图片之后,浏览器会创建一个 File 对象来存储我们上传的图片的所有数据,我们需要获取到这个对象
  2. 使用 FormData 携带图片文件:这个方法可以实现表单的提交方式,即采用特定的结构
  3. 提交表单数据给服务器
<body>
  <!-- 文件选择元素 -->
  <input type="file" class="upload">
  <img src="" alt="" class="my-img">

  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    /**
     * 目标:图片上传,显示到网页上
     *  1. 获取图片文件
     *  2. 使用 FormData 携带图片文件
     *  3. 提交到服务器,获取图片url网址使用
    */
    document.querySelector('.upload').addEventListener('change', e => {
      const fd = new FormData();
        // 获取图片文件对象:e.target.files[0]
        // 使用 FormData 携带图片文件:fd.append('img', e.target.files[0]);
      fd.append('img', e.target.files[0]);
      console.log(e.target.files[0]);
        // 提交表单数据给服务器
      axios({
        url: 'http://hmajax.itheima.net/api/uploadimg',
        method: 'post',
        data: fd
      }).then(result => {
        console.log(result);
        document.querySelector('img').src = result.data.data.url;
      })
    })
  </script>
</body>

08. XMLHttpRequest

XMLHttpRequest 对象用于与服务器的交互。通过 XMLHttpRquest 可以在不刷新页面的情况下请求特定的 URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。这个对象在 AJAX 编程中被大量的使用。axios 的内部就是采用 XMLHttpRequest 与服务器交互。

8.1 发送基本请求

使用步骤:

  1. 创建 XMLHttpRequest 对象
  2. 配置请求方法和请求 URL 地址
  3. 监听 loadend 时间,接收响应结果
  4. 发送请求给服务器
<body>
  <p></p>
  <script>
    /**
     * 目标:使用XMLHttpRequest对象与服务器通信
     *  1. 创建 XMLHttpRequest 对象
     *  2. 配置请求方法和请求 url 地址
     *  3. 监听 loadend 事件,接收响应结果
     *  4. 发起请求
    */
    const xhr = new XMLHttpRequest();
    const p = document.querySelector('p');
    xhr.open('GET', 'https://hmajax.itheima.net/api/province');
    xhr.addEventListener('loadend', () => {
      const data = JSON.parse(xhr.response);
      p.innerHTML = data.list.join('<br>');
    })
    xhr.send();
  </script>
</body>

再来看看 axios 的代码

<body>
    <!-- 
        axios库地址: https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js
        省份数据地址: http://ajax-api.itheima.net/api/province
    -->
    <p></p>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <script>
        const p = document.querySelector('p');
        axios({
            url: "http://ajax-api.itheima.net/api/province"
        }).then(result => {
            console.log(result);
            p.innerHTML = result.data.data.join('<br>');
        })
    </script>
</body>

axios 帮助我们发送请求并且将返回的结果封装到 result 对象中,数据挂载到 data 属性上,不需要我们进行过多的操作

8.2 复杂请求的发送

带参数的 GET 请求

  • axios 中是使用配置对象的 data 参数来给实现参数的传递,原生方式下就只能自己将请求放置到请求地址的后面http://hmajax.itheima.net/api/area?参数名1=值1&参数名2=值

发送带有 JSON 对象的请求:

  • 核心:请求头中设置 Content-Type: appliocation/json
  • 请求体中携带 JSON 字符串
<body>
    <script>
    	xhr.open('请求方法', '请i取地址');
        xhr.addEventListener('loadend', () => {
            console.log(xhr.response);
        })
        // 告诉服务器传递的参数类型是 JSON 字符串
        xhr.setRequestHeader('Content-Type', 'application/json');
        xhr.send(JSON 字符串);
    </script>
</body>

09. Promise

Promise 对象用于标识一个异步操作的最终完成(或者失败)及其结果值,axios 的底层也是使用了这个对象

9.1 模拟 axios 请求

<body>
  <script>
    const p = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve('请求成功');
        // reject(new Error('请求失败'));
      }, 2000)
    })
    p.then(result => {
      console.log(result);
    }).catch(error => {
      console.log(error);
    })
  </script>
</body>
  • 创建一个新的 Promise 对象,向里面传入一个执行器函数作为参数,JavaScript 引擎会自动将 resolvereject 两个函数传递进来,当执行成功后调用 resolve 函数,执行失败后调用 reject 函数
  • 这时候再调用 Promise 对象的 then 或者 catch 方法来获取我们调用上面两个函数时传入的数据

9.2 Promise 对象的三种状态

一个 Promise 对象必然处于以下几种状态之一

  1. 待定状态:初始状态,既没有被兑现也没有被拒绝
  2. 已兑现状态:调用了 resolve 函数,表明操作已经完成,会调用 then() 中传入的回调函数
  3. 已拒绝状态:意味着操作失败,调用了 reject 函数,会调用 catch() 中传入的回调函数

当这个对象达到已兑现状态或已拒绝状态的时候,状态就已经敲定了,不能再改变

10. 同步代码和异步代码

同步代码:浏览器是按照我们书写代码的顺序一行一行的执行程序的,浏览器会等待代码的解析和工作,在上一个语句执行完成后才会去执行下一条语句,这样做是很有必要的,因为每一行新的代码都是建立在前面代码的基础上的。

异步代码:异步编程技术使得程序在执行一个可能长期运行的任务的时候对其他的事件作出反应,从而不必等待这个时间很长的任务的完成,是在调用后耗时,不阻塞代码的继续执行,在将来完成后回来触发一个回调函数

10.1 async 函数和 await

async 函数是使用async 关键字声明的函数。这个函数是 AsyncFunction 构造函数的实例,并且其中允许使用 await关键字。它们的作用是用一种更加高效简洁的方式写出基于 Promise 异步执行的代码,无需再去考虑链式调用的问题。

在 async 函数内,使用 await 关键字取代 then 函数,等待获取 Promise 对象成功状态的结果值

/**
 * 目标:掌握async和await语法,解决回调函数地狱
 * 概念:在async函数内,使用await关键字,获取Promise对象"成功状态"结果值
 * 注意:await必须用在async修饰的函数内(await会阻止"异步函数内"代码继续执行,原地等待结果)
*/
async function getData() {
const pRes = await axios({
  url: 'http://hmajax.itheima.net/api/province'
});
pname = pRes.data.list[0];
document.querySelector('.province').innerHTML = pname;
const cityRes = await axios({
  url: 'http://hmajax.itheima.net/api/city',
  params: {
    pname: pname
  }
});
cname = cityRes.data.list[0];
document.querySelector('.city').innerHTML = cname;
const aRes = await axios({
  url: 'http://hmajax.itheima.net/api/area',
  params: {
    pname: pname,
    cname: cname
  }
});
aName = aRes.data.list[0];
document.querySelector('.area').innerHTML = aName;
}
getData();

会等待我们上面的 await 修饰的函数完成后再去进行别的操作

10.2 async 函数和 await 捕获错误

async function getData() {
    try {
        const pRes = await axios({
        url: 'http://hmajax.itheima.net/api/province'
      });
      pname = pRes.data.list[0];
      document.querySelector('.province').innerHTML = pname;
      const cityRes = await axios({
        url: 'http://hmajax.itheima.net/api/city',
        params: {
          pname: pname
        }
      });
      cname = cityRes.data.list[0];
      document.querySelector('.city').innerHTML = cname;
      const aRes = await axios({
        url: 'http://hmajax.itheima.net/api/area',
        params: {
          pname: pname,
          cname: cname
        }
      });
      aName = aRes.data.list[0];
      document.querySelector('.area').innerHTML = aName;
    }catch (error) {
      console.log(error);
    }
}

10.3 事件循环

JavaScript 有一个基于事件循环的并发模型,事件循环负责执行代码、收集和处理时间以及执行后续队列中的子任务。这个模型与其他语言中的模型截然不同。这是因为 JavaScript 是单线程 ,为了不让耗时代码阻塞其他代码的执行,设计了事件循环模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/279798.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

golang 图片加水印

需求&#xff1a; 1&#xff0c;员工签到图片加水印 2&#xff0c;水印文字需要有半透明的底色&#xff0c;避免水印看不清 3&#xff0c;图片宽设置在600&#xff0c;小于600或者大于600都需要等比例修改图片的高度&#xff0c;保持水印在图片中的大小和位置 4&#xff0c;处理…

湘潭大学-2023年下学期-c语言-作业0x0a-综合1

A 求最小公倍数 #include<stdio.h>int gcd(int a,int b) {return b>0?gcd(b,a%b):a; }int main() {int a,b;while(~scanf("%d%d",&a,&b)){if(a0&&b0) break;printf("%d\n",a*b/gcd(a,b));}return 0; }记住最大公约数的函数&…

【C++杂货铺】C++11新特性——lambda

文章目录 一、C98中的排序二、先来看看 lambda 表达式长什么样三、lambda表达式语法3.1 捕捉列表的使用细节 四、lambda 的底层原理五、结语 一、C98中的排序 在 C98 中&#xff0c;如果要对一个数据集合中的元素进行排序&#xff0c;可以使用 std::sort 方法&#xff0c;下面…

《掌握这些黑科技,让你的电脑办公效率飞升》

随着电脑在现代办公中的广泛应用&#xff0c;如何提升电脑办公效率成为了一个重要的话题。随着科技的不断发展&#xff0c;越来越多的黑科技涌现出来&#xff0c;为我们提升电脑办公效率提供了更多的选择。在这篇文章中&#xff0c;我将为大家介绍几种提升电脑办公效率的黑科技…

【23.12.30高可用篇】什么是SLA?

什么是SLA&#xff1f; ✔️简述✔️拓展知识✔️4个9、5个9 ✔️简述 SLA是Service Level Agreement的缩写&#xff0c;意为服务等级协议。它是指供应商和客户之间达成的一份正式协议&#xff0c;规定了供应商应该向客户提供的服务水平、质量、可靠性和响应时间等指标。 SLA通…

Redis为何如此快速?

1. 引言 Redis&#xff08;Remote Dictionary Server&#xff09;是一个高性能的键值对存储数据库。它以其出色的性能和灵活的数据结构而闻名&#xff0c;今天就来谈谈redis为什么会这么快。 1.1 Redis是单线程吗&#xff1f; Redis 的单线程主要是指 Redis 的网络 IO 和键值对…

GBASE南大通用携手宇信科技打造“一表通”全链路解决方案

什么是“一表通”&#xff1f; “一表通”是国家金融监督管理总局为发挥统计监督效能、完善银行保险监管统计制度、推进监管数据标准化建设、打破数据壁垒&#xff0c;而制定的新型监管数据统计规范。相较于以往的报送接口&#xff0c;“一表通”提高了对报送时效性、校验准确…

普中STM32-PZ6806L开发板(烧录方式)

前言 有两种方式, 串口烧录和STLink方式烧录;串口烧录 步骤 开发板USB转串口CH340驱动板接线到USB连接PC使用自带工具普中自动下载软件.exe烧录程序到开发板 ST Link方式 这种方式需要另外进行供电&#xff0c; 我买的如下&#xff0c;当年用于调试STM8的&#xff0c;也可…

[GDOUCTF 2023]hate eat snake

[GDOUCTF 2023]hate eat snake wp 一般说玩游戏的题答案在源码里&#xff0c;但是本题源码中没有任何跟 “flag” 或者 “ctf” 有关的信息。 页面如下&#xff1a; 唤出控制台 在此页面中 F12 调不出控制台&#xff08;可能是在 js 代码中禁用了&#xff09;。但其实还有两…

openGauss学习笔记-177 openGauss 数据库运维-逻辑复制-逻辑解码-逻辑解码概述

文章目录 openGauss学习笔记-177 openGauss 数据库运维-逻辑复制-逻辑解码-逻辑解码概述177.1 功能描述177.2 注意事项177.3 性能 openGauss学习笔记-177 openGauss 数据库运维-逻辑复制-逻辑解码-逻辑解码概述 177.1 功能描述 openGauss对数据复制能力的支持情况为&#xff…

【力扣题解】P105-从前序与中序遍历序列构造二叉树-Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P105-从前序与中序遍历序列构造二叉树-Java题解&#x1f30f;题目描述&#x1f4a1;题…

iframe嵌套其它网站页面及相关知识点详解

在开发过程中会遇到需要 在一个页面中嵌套另外一个页面&#xff0c;就要使用到框架 标签&#xff0c;然后指定src就可以了。 基本语法&#xff1a; <iframe src"需要展示的网站页面的URL"></iframe>用法举例&#xff1a; <!DOCTYPE html> <h…

yolov8实战第四天——yolov8图像分类 ResNet50图像分类(保姆式教程)

yolov8实战第一天——yolov8部署并训练自己的数据集&#xff08;保姆式教程&#xff09;_yolov8训练自己的数据集-CSDN博客在前几天&#xff0c;我们使用yolov8进行了部署&#xff0c;并在目标检测方向上进行自己数据集的训练与测试&#xff0c;今天我们训练下yolov8的图像分类…

人工神经网络

前言 人工神经网络(Artificial Neural Network&#xff0c;ANN)&#xff0c;通常简称为神经网络&#xff0c;是一种在生物神经网络的启示下建立的数据处理模型。神经网络由大量的人工神经元相互连接进行计算&#xff0c;根据外界的信息改变自身的结构&#xff0c;主要通过调整…

【金猿案例展】昆仑银行——一体化智能可观测平台全面保障昆仑银行业务稳定性...

‍ 博睿数据案例 本项目案例由博睿数据投递并参与“数据猿年度金猿策划活动——2023大数据产业年度创新服务企业榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 根据中国人民银行&#xff0c;中国银保监会颁布的【关于金融行业贯彻<推进互联网协议第六版…

【JavaEE进阶】 @RequestMapping注解

文章目录 &#x1f384;什么是RequestMapping 注解&#x1f333;RequestMapping 使⽤&#x1f332;RequestMapping 是GET还是POST请求&#xff1f;&#x1f6a9;使用Postman构造POST请求 ⭕总结 &#x1f384;什么是RequestMapping 注解 在Spring MVC 中使⽤ RequestMapping 来…

使用Google OSV工具扫描依赖安全漏洞

安全漏洞是软件工程化能力的试金石 2021年年底&#xff0c;Log4j的漏洞陆续被公开。因为该框架被大量的开源软件依赖&#xff0c;所以&#xff0c;漏洞影响面非常大。 面对这个漏洞&#xff0c;我们遇到的第一个问题是&#xff1a;如何知道我们哪些工程使用了Log4j&#xff1f;…

基于ssm的程序设计实践项目管理系统+jsp论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本实践项目管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

NFC物联网智能学生宿舍系统设计方案

随着物联网技术的不断发展&#xff0c;智慧城市、智能家居、智慧校园的建设也在如火如茶地进行。本文结合物联网发展过程中相关的技术&#xff0c;应用到智慧校园的建设过程中&#xff0c;将学生宿舍打造成舒适、安全的集体空间&#xff0c;该系统可以对学生宿舍实现智能开门、…

华为发布的工业软件三大难题:适用于CAD领域的NURBS裁剪曲面自交快速检测

以下内容转载&#xff1a; 自相交&#xff0c;在几何图形有效性验证中的一个错误类型&#xff0c;面要素的自相交在原始数据中是最常见的&#xff0c;这种错误有些可以人工发现&#xff0c;但有些就需要借助程序来发现。 发生自相交的根本原因情况比较多&#xff0c;有些是因为…