当前位置: 首页 > news >正文

“探索AJAX:前端与后端数据交互的利器“

前言

在现代Web开发中,前端与后端之间的数据交互是一个至关重要的环节。为了实现无需刷新页面的动态更新,AJAX(Asynchronous JavaScript and XML)作为一种强大的技术被广泛应用。

AJAX的原理

AJAX通过JavaScript和XMLHttpRequest对象实现异步通信,使得前端能够向后端发送请求并获取响应,而无需刷新整个页面。它的核心思想是在后台发送HTTP请求,然后通过回调函数处理服务器返回的数据。这种异步通信的方式带来了更好的用户体验和性能优化。

AJAX的使用方法

  1. 创建XMLHttpRequest对象:使用JavaScript创建一个XMLHttpRequest对象,该对象负责发送HTTP请求和接收服务器的响应。
let xhr = new XMLHttpRequest();
  1. 指定请求类型和URL:设置XMLHttpRequest对象的请求类型(GET或POST)和目标URL,以确定要向服务器发送何种请求。
xhr.open('GET', 'http://api.example.com/data', true);
  1. 发送请求:调用XMLHttpRequest对象的open()和send()方法,将请求发送到服务器。
xhr.send();
  1. 处理服务器响应:通过监听XMLHttpRequest对象的readyState和status属性,可以实时获取服务器的响应状态和数据。
xhr.onreadystatechange = function() {if (xhr.readyState === 4 && xhr.status === 200) {console.log(xhr.responseText);}
};
  1. 更新页面内容:根据服务器返回的数据,使用JavaScript动态更新页面内容,实现无刷新效果。
document.getElementById('result').innerHTML = xhr.responseText;

XMLHttpRequest对象的readyState属性

XMLHttpRequest对象的readyState属性用于表示当前请求的状态,它有以下几个可能的取值:

readyState = 0 :初始状态。XMLHttpRequest对象已创建,但还没有调用open()方法。
readyState = 1 :open()方法已被调用。请求已经准备好进行初始化,但尚未发送。
readyState = 2 :send()方法已被调用,并且所有响应头部都已经接收到。
readyState = 3 :正在下载响应体。responseText属性中已经获取了部分数据。
readyState = 4 :请求操作已完成。整个响应体已经下载完毕,或者请求遇到了错误。

这些不同的状态反映了XMLHttpRequest对象在请求过程中的不同阶段。我们可以通过监听其onreadystatechange事件来获取并处理readyState属性的变化。当readyState的值发生变化时,我们可以根据具体的状态执行相应的操作。

例如,在readyState为4时,我们可以通过检查status属性来确定请求是否成功,并访问responseText或responseXML属性来获取服务器返回的数据。

使用XMLHttpRequest对象时,我们应该处理各个readyState状态的变化,以确保请求和响应的正确处理。同时,为了提高用户体验,我们可以在请求过程中显示加载指示器或其他反馈信息,以便用户知道请求的状态和进展情况。

XMLHttpRequest对象的status属性

XMLHttpRequest对象的status属性表示HTTP响应状态码。它是一个三位数字,用于指示服务器对请求的处理结果。

HTTP响应状态码通常分为以下几类:

1xx:信息提示。服务器已经接收到请求,但需要进一步操作才能完成它。
2xx:成功。请求已经被成功处理,并得到了正确的响应。
3xx:重定向。客户端需要进一步采取操作才能完成请求。
4xx:客户端错误。请求包含错误或无法完成。
5xx:服务器错误。服务器无法完成请求。

以下是一些常见的HTTP状态码及其含义:

-   200 OK:请求成功。服务器成功地返回了所请求的数据。
-   201 Created:请求成功,并且服务器创建了新的资源。
-   204 No Content:请求成功,但没有返回任何数据。
-   301 Moved Permanently:请求的资源已经永久移动到新的URL。
-   400 Bad Request:请求包含错误,并且服务器无法理解或处理它。
-   401 Unauthorized:请求需要用户验证。
-   403 Forbidden:服务器拒绝了请求。
-   404 Not Found:请求的资源不存在。
-   500 Internal Server Error:服务器遇到了错误,无法完成请求。

在使用XMLHttpRequest对象时,我们可以通过检查status属性来确定服务器是否成功地处理了请求。

例如,当status为200时,表示请求成功,并且可以访问responseText或responseXML属性来获取服务器返回的数据。

比较AJAX请求的三种方式

下面将介绍三种常见的AJAX请求方式:原生JavaScript、jQuery和fetch,并对它们的相同点和不同点进行比较。

原生JavaScript

    <script>// 获取按钮元素let btn = document.getElementById('btn')// 给按钮绑定点击事件btn.addEventListener('click', () => {// 发送一个http请求let xhr = new XMLHttpRequest()// 指定请求方式和请求的URLxhr.open('GET', 'http:192.168.31.26:3000/top/song?type=7', true)// 监听请求状态变化xhr.onreadystatechange = () => {// 如果请求已完成,并且响应状态码为200,表示请求成功if (xhr.readyState === 4 && xhr.status === 200) {// 将响应数据转换成JavaScript对象const result = JSON.parse(xhr.responseText).data// 在控制台输出结果console.log(result);   }}// 发送请求xhr.send()})</script>

具体解释如下:

  1. 通过<script>标签嵌入JavaScript代码。

  2. 使用document.getElementById('btn')获取按钮元素,然后将其赋值给变量btn

  3. 使用addEventListener()方法给按钮绑定点击事件的监听器。当按钮被点击时,回调函数会被执行。

  4. 在回调函数中,创建了一个新的XMLHttpRequest对象xhr,用于发送HTTP请求。

  5. 使用xhr.open()方法配置请求的类型(GET)、URL和是否异步(true)。

  6. 通过xhr.onreadystatechange属性指定一个回调函数,该函数会在请求状态发生变化时被触发。

  7. 在回调函数中,使用xhr.readyState获取当前请求状态,xhr.status获取响应状态码。

  8. 如果请求状态为4(请求已完成),并且响应状态码为200(请求成功),则执行以下代码:

    a. 使用xhr.responseText获取响应的文本数据。

    b. 使用JSON.parse()方法将文本数据转换为JavaScript对象。

    c. 将转换后的结果赋值给变量result

    d. 使用console.log()将结果输出到控制台。

  9. 最后,通过xhr.send()方法发送请求。

总之,这段代码使用了原生JavaScript中的XMLHttpRequest对象来发送HTTP GET请求,并通过监听请求状态变化,获取并处理响应数据

jQuery:

<!-- 引入jQuery库 --><script src="http://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script><script>// 获取按钮元素let btn = document.getElementById('btn')// 给按钮绑定点击事件btn.addEventListener('click', () => {// 发起Ajax请求$.ajax({url: 'http:192.168.31.26:3000/top/song?type=7', // 请求地址method: 'GET', // 请求方法dataType: 'json', // 期望的响应数据类型success: (res) => { // 请求成功的回调函数console.log(res); // 在控制台输出响应结果}})})</script>

这段代码与之前的代码相比,引入了jQuery库,使用其提供的$.ajax()方法发起异步请求。

具体解释如下:

  • 首先,通过<script>标签引入了CDN上托管的jQuery库。
  • 在按钮点击事件的回调函数中,使用$.ajax()方法发起异步请求。
  • $.ajax()方法的配置对象中,通过url指定请求的地址为http:192.168.31.26:3000/top/song?type=7,即获取类型为"7"的新歌。
  • 使用method: 'GET'指定请求的方法为GET。
  • 通过dataType: 'json'指定期望的响应数据类型为JSON。
  • success属性中,定义了请求成功时的回调函数,其中的(res) => { console.log(res); }会在请求成功后被执行,并将响应结果输出到控制台。

总之,这段代码使用了jQuery库提供的$.ajax()方法发起异步请求,相对于传统的XMLHttpRequest对象,它提供了更简洁的语法和更好的兼容性。同时,通过配置对象可以灵活地设置请求的URL、方法、期望的响应数据类型以及请求成功时的回调函数。

fetch:

<!-- 引入jQuery库 --><script src="http://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script><script>// 获取按钮元素let btn = document.getElementById('btn')// 给按钮绑定点击事件btn.addEventListener('click', () => {// 使用fetch API发起异步请求fetch('http:192.168.31.26:3000/top/song?type=7').then((data) => {// 将响应数据解析为JSON格式return data.json()}).then((res) => {// 打印响应结果到控制台console.log(res);})})</script>

这段代码使用了原生JavaScript中的fetch()方法来发起异步请求,相较于之前的代码,不再依赖于jQuery库。

具体解释如下:

  • 首先,通过<script>标签引入了CDN上托管的jQuery库。
  • 在按钮点击事件的回调函数中,使用fetch()方法发起异步请求。
  • fetch()方法接收一个URL作为参数,并返回一个Promise对象,表示异步操作的结果。
  • 通过then()方法链,将返回的数据流转换为JSON格式,并在第二个then()中处理响应结果。
  • 在第二个then()中,定义了一个回调函数,该函数接收解析后的JSON响应结果作为参数,并将其打印到控制台。

相同点:

  1. 都可以实现异步请求:这三种方式都能够发送异步请求,不会阻塞页面的加载和渲染。
  2. 都支持GET和POST请求:无论是原生JavaScript、jQuery还是fetch,都可以发送GET和POST请求,并且可以设置请求参数。
  3. 都支持处理响应数据:无论使用哪种方式,都可以获取到服务器返回的响应数据,并对其进行处理。

不同点:

  1. 语法和用法差异:原生JavaScript使用XMLHttpRequest对象来发送请求,需要手动设置请求头、监听状态变化等。而jQuery和fetch则提供了更简洁易用的API,对请求的各个环节进行了封装,使用起来更加方便。
  2. 第三方库依赖:原生JavaScript是浏览器原生支持的,不需要引入额外的库。而jQuery和fetch需要引入相应的库文件,如上述代码中使用的jQuery和fetch API。
  3. 对错误处理的支持:原生JavaScript和jQuery都提供了错误处理的机制,可以通过回调函数来处理请求过程中可能出现的错误。而fetch则使用Promise机制,可以链式调用then()和catch()方法来处理成功和失败的情况。
  4. 对不同数据类型的支持:原生JavaScript和fetch可以根据设置的dataType或响应头自动解析不同的数据类型,如JSON、XML等。而jQuery则可以通过设置dataType参数来指定期望的响应数据类型。

综上所述,原生JavaScript、jQuery和fetch都是常见的AJAX请求方式,各自有着不同的特点和适用场景。

结语

AJAX作为前端与后端数据交互的利器,给现代Web开发带来了巨大的便利和灵活性。通过理解AJAX的原理和使用方法,并注意相关的注意事项,我们可以更好地利用AJAX来提升网站的用户体验、性能和功能拓展。

相关文章:

“探索AJAX:前端与后端数据交互的利器“

前言 在现代Web开发中&#xff0c;前端与后端之间的数据交互是一个至关重要的环节。为了实现无需刷新页面的动态更新&#xff0c;AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;作为一种强大的技术被广泛应用。 AJAX的原理 AJAX通过JavaScript和XMLHttpReque…...

【5G NR】移动通讯中使用的信道编解码技术

目录 一、引言 二、信道编解码技术概述 三、移动通讯中常用的信道编解码技术 四、优缺点分析与比较 五、未来发展趋势 六、结论 本文主要介绍了移动通讯中采用的信道编解码技术&#xff0c;由于在5G NR终端中&#xff0c;通常要兼容4G LTE通讯技术&#xff0c;所以4G LTE…...

用Python Tkinter打造的精彩连连看小游戏【附源码】

文章目录 连连看小游戏&#xff1a;用Python Tkinter打造的精彩游戏体验游戏简介技术背景MainWindow类:职责:方法:Point类: 主执行部分:完整代码&#xff1a;总结&#xff1a; 连连看小游戏&#xff1a;用Python Tkinter打造的精彩游戏体验 在丰富多彩的游戏世界中&#xff0c…...

nvm安装node后,npm无效

类似报这种问题&#xff0c;是因为去github下载npm时下载失败&#xff0c; Please visit https://github.com/npm/cli/releases/tag/v6.14.17 to download npm. 第一种方法&#xff1a;需要复制这里面的地址爬梯子去下载&#xff08;github有时不用梯子能直接下载&#xff0c;有…...

spring boot(2.4.x 开始)和spring cloud项目中配置文件application和bootstrap加载顺序

在前面的文章基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136060312 spring boot 2.4.x 版本之前通过 ConfigFileApplicationListener 加载配置 https://github.com/spring-projects/spring-boot/blob/v2.3.12.RELEASE/spring-boot-project/spring-boot/src/mai…...

5-2、S曲线计算【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍S曲线的基本变换&#xff0c;将基本形式的S曲线变换成为任意过两点的S曲线&#xff0c;为后续步进电机S曲线运动提供理论支撑 一.计算目标 ①计算经过任意不同两点的S曲线方程 ②可调节曲线平…...

SQL 注入 - http头注入之UA头注入探测

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、http头注入介绍 HTTP头注入是一种网络安全攻击手段,它利用了Web应用程序对HTTP头的处理不当或缺乏充分的验证和过滤。在这种攻击中,攻击者通过修改HTTP请求头中的某些字段,…...

学习数据结构和算法的第5天

空间复杂度及其常见案例 空间复杂度 空间复杂度也是一个数学函数表达式&#xff0c;是对一个算法在运行过程中临时占用存储空间大小的量度。 空间复杂度不是程序占用了多少bytes的空间&#xff0c;因为这个也没太大意义&#xff0c;所以空间复杂度算的是变量的个数。空间复杂度…...

Android 11 访问 Android/data/或者getExternalCacheDir() root方式

前言&#xff1a; 需求要求安装三方应用ExternalCacheDir()下载下来的apk文件。 getExternalCacheDir() : /storage/emulated/0/Android/data/com../cache/ 获取访问权限 如果手机安卓版本为Android10的时候,可以在AndroidManifest.xml中添加下列代码 android:requestLegacyExt…...

Linux探秘之旅:透彻理解路径、命令与系统概念

目录 如何远程连接 远程登录简明指南 linux区别 1.严格区分大小写 2.linux的命令返回结果判断 3.如何查看网络信息 4.关于后缀名&#xff08;Linux不关心文件后缀&#xff09; 4.1 需要记忆的后缀 5.echo命令 6.linux一切皆文件 6.1比如磁盘的文件 6.2可执行文件 …...

哈希算法 c语言

#include <stdio.h> #include <stdlib.h> #include <string.h> // 哈希函数 unsigned int hash_function(const char *str) { unsigned int hash 0; while (*str) { hash (hash * 31 *str) % 1000; str; } return hash;…...

新版MQL语言程序设计:组合模式的原理、应用及代码实现

文章目录 一、什么组合模式二、为什么需要组合模式三、组合模式的实现原理四、组合模式的应用场景五、组合模式的代码实现 一、什么组合模式 组合模式是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和…...

代码随想录算法训练营第25天 | 216.组合总和III ,17.电话号码的字母组合

回溯章节理论基础&#xff1a; https://programmercarl.com/%E5%9B%9E%E6%BA%AF%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 216.组合总和III 题目链接&#xff1a;https://leetcode.cn/problems/combination-sum-iii/ 思路: 本题就是在[1,2,3,4,5,6,7,…...

Rust 第一个rust程序Hello Rust️

文章目录 前言一、vscode 安装rust相关插件二、Cargo New三、vscode调试rustLLDB 前言 Rust学习系列。今天就让我们掌握第一个rust程序。Hello Rust &#x1f980;️。 在上一篇文章我们在macOS成功安装了rust。 一、vscode 安装rust相关插件 以下是一些常用的 Rust 开发插件…...

高斯消去法 | LU分解 | PA=LU分解(MatLab)

一、问题描述 利用高斯消去法&#xff0c;LU 分解及PALU 分解求解非线性方程组。 二、实验目的 掌握高斯消去法、LU 分解、PALU 分解的算法原理&#xff1b;编写代码实现利用高斯消去法、LU 分解、PALU 分解来求解线性方程组。 三、实验内容及要求 1. 利用顺序高斯消去法求…...

Linux笔记之expect和bash脚本监听输出并在匹配到指定字符串时发送中断信号

Linux笔记之expect和bash脚本监听输出并在匹配到指定字符串时发送中断信号 code review! 文章目录 Linux笔记之expect和bash脚本监听输出并在匹配到指定字符串时发送中断信号1.expect2.bash 1.expect 在Expect脚本中&#xff0c;你可以使用expect来监听程序输出&#xff0c;…...

项目02《游戏-12-开发》Unity3D

基于 项目02《游戏-11-开发》Unity3D &#xff0c; 任务&#xff1a;实现场景怪物自动巡航 &#xff0c; 首先在场景中创建小球命名为路径点WayPoint0&#xff0c; 取消小球的碰撞器Collider&#xff0c; 再复制两个改名为WayPoint1 和 WayPoint2 &#xff0c; 在…...

记一次面试题

1.Php 私有化包&#xff08;composer&#xff09;的部署 1. 创建你的PHP包 确定你的包的功能和命名空间。 创建一个新的目录并初始化一个Git仓库。 使用composer init命令创建一个composer.json文件&#xff0c;并定义你的包名、版本、依赖等信息。 2. 开发并测试你的包 在本地…...

Rust入门2——随机数

文章目录 一、生成随机数二、比较两个数相等 简单列出两个Rust的小例子 一、生成随机数 在Cargo.toml的dependencies中引入rand&#xff0c;指定rand的版本 [dependencies] rand "^0.3.14"之后在主函数中调用rand函数&#xff0c;生成随机数 use rand::Rng; f…...

c#: 表达式树的简化

环境&#xff1a; .net 6 一、问题&#xff1f; 有下面的表达式&#xff1a; var nums new List<int> { 1, 2, 3 }; Expression<Func<int, bool>> exp i > i > nums.Max();我们知道&#xff0c;它其实就是&#xff1a;exp i > i > 3; 那么…...

13. UE5 RPG限制Attribute的值的范围以及生成结构体

前面几章&#xff0c;我们实现了通过GameplayEffect对Attribute值的修改&#xff0c;比如血量和蓝量&#xff0c;我们都是有一个最大血量和最大蓝量去限制它的最大值&#xff0c;而且血量和蓝量最小值不会小于零。之前我们是没有实现相关限制的&#xff0c;接下来&#xff0c;我…...

UE4运用C++和框架开发坦克大战教程笔记(十九)(第58~60集)完结

UE4运用C和框架开发坦克大战教程笔记&#xff08;十九&#xff09;&#xff08;第58~60集&#xff09;完结 58. 弹窗显示与隐藏59. UI 面板销毁60. 框架完成与总结 58. 弹窗显示与隐藏 这节课我们先来补全 TransferMask() 里对于 Overlay 布局类型面板的遮罩转移逻辑&#xff…...

ModuleNotFoundError: No module named ‘_ctypes‘报错解决方案

1、须命令安装libbffi-devel软件包&#xff1a; yum install libffi-devel -y2、安装完后再重装python3&#xff0c;无须卸载 找到之前的python3安装包&#xff0c;如果安装包删除了通过 history | grep python命令找到最初安装时的包下载的命令下载&#xff0c;保证版本一样&…...

【服务器数据恢复】服务器RAID模块硬件损坏的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 某品牌服务器中有一组由数块SAS硬盘组建的RAID5磁盘阵列&#xff0c;服务器操作系统是WINDOWS SERVER&#xff0c;服务器中存放企业数据&#xff0c;无数据库文件。 服务器出故障之前出现过几次意外断电的情况&#xff0c;服务器断电…...

spring boot3x登录开发-上(整合jwt)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 jwt简介 导依赖 编写jwt工具类 1.配置项直接嵌入代码&#xff0c;通过类名.静态方法使用 2.配置项写到…...

git 克隆拉取代码出现私钥权限问题。

问题反馈&#xff1a; rootdd:~/android/boost-1.74-for-android-r20b# git clone https://github.com/liulilittle/boost-1.74-for-android-r20b.git Cloning into boost-1.74-for-android-r20b... WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 0777 for /root/…...

【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-卷积码原理

目录 一、引言 二、卷积编码的发展历史 2.1 卷积码的起源 2.2 主要发展阶段 2.3 重要里程碑 三、卷积编码的基本概念 3.1 基本定义 3.2 编码器框图 3.3 编码多项式 3.4 网格图(Trellis)描述 四、MATLAB示例 一、引言 卷积编码&#xff0c;作为数字通信领域中的一项…...

揭开Markdown的秘籍:标题|文字样式|列表

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Markdown指南、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️Markdown 标题二. ⛳️Markdown 文字样式2.1 &#x1f514;斜体2.2 &…...

移动最小二乘法

移动最小二乘法&#xff08;Moving Least Square&#xff0c;MLS&#xff09;主要应用于曲线与曲面拟合&#xff0c;该方法基于紧支撑加权函数&#xff08;即函数值只在有限大小的封闭域中定义大于零&#xff0c;而在域外则定义为零&#xff09;和多项式基函数&#xff0c;通过…...

【LeetCode】37. 解数独(困难)——代码随想录算法训练营Day30

题目链接&#xff1a;37. 解数独 题目描述 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&…...

VUE学习——属性绑定

属性绑定&#xff0c;就是给html添加id、class这样类似的操作。 <template><div v-bind:id"dynamicId"><div v-bind:class"dynamicClass">Test</div></div> </template><script>export default{data(){return{…...

vue3 之 通用组件统一注册全局

components/index.js // 把components中的所组件都进行全局化注册 // 通过插件的方式 import ImageView from ./ImageView/index.vue import Sku from ./XtxSku/index.vue export const componentPlugin {install (app) {// app.component(组件名字&#xff0c;组件配置对象)…...

[Java][算法 双指针]Day 02---LeetCode 热题 100---04~07

LeetCode 热题 100---04~07 第一题&#xff1a;移动零 思路 找到每一个为0的元素 然后移到数组的最后 但是需要注意的是 要在给定的数组原地进行修改 并且其他非零元素的相对顺序不能改变 我们采用双指针法 定义两个指针i和j i和j一开始分别都在0索引位置 然后判断j所…...

【问题解决】如何将一个服务器的docker迁移到另一个服务器

要将Docker容器从一台机器迁移到另一台机器&#xff0c;可以按照以下步骤操作&#xff1a; 在机器A上提交容器为镜像&#xff1a; 使用docker commit命令将运行中的容器保存为新的镜像。这里需要容器的ID或名称&#xff0c;以及你想要命名的目标镜像名。 docker commit [容器…...

C++单例模式详解

目录 0. 前言 1. 懒汉式单例模式 1.1 最简单的单例模式 1.2 防止内存泄漏 1.2.1 智能指针的方法 1.2.2 静态嵌套的方法 1.3 保证线程安全 1.4 C11版本的优雅解决方案 2. 饿汉式单例模式 0. 前言 起因是在程序中重复声明了一个单例模式的变量&#xff0c;后来程序怎么调…...

LLM应用开发与落地:流式响应

一、背景 最近智能客服产品给到一个游戏客户那边&#xff0c;客户那边的客服负责人体验后认为我们产品回答的准确率是还是比较高的。同时&#xff0c;他反馈了几个需要改进的地方&#xff0c;其中一个就是机器人回复慢。机器人回复慢有很多原因&#xff0c;也有优化方式&#…...

神经网络 | 基于 CNN 模型实现土壤湿度预测

Hi&#xff0c;大家好&#xff0c;我是半亩花海。在现代农业和环境监测中&#xff0c;了解土壤湿度的变化对于作物生长和水资源管理至关重要。通过深度学习技术&#xff0c;特别是卷积神经网络&#xff0c;我们可以利用过去的土壤湿度数据来预测未来的湿度趋势。本文将使用 Pad…...

江科大STM32 终

目录 SPI协议10.1 SPI简介W25Q64简介10.3 SPI软件读写W25Q6410.4 SPI硬件外设读写W25Q64 BKP备份寄存器、PER电源控制器、RTC实时时钟11.0 Unix时间戳代码示例&#xff1a;读写备份寄存器BKP11.2 RTC实时时钟 十二、PWR电源控制12.1 PWR简介代码示例&#xff1a;修改主频12.3 串…...

《MySQL 简易速速上手小册》第10章:未来趋势和进阶资源(2024 最新版)

文章目录 10.1 MySQL 在云计算和容器化中的应用10.1.1 基础知识10.1.2 重点案例&#xff1a;使用 Python 部署 MySQL 到 Kubernetes10.1.3 拓展案例 1&#xff1a;在 AWS RDS 上部署 MySQL 实例10.1.4 拓展案例 2&#xff1a;使用 Docker 部署 MySQL 10.2 MySQL 和 NoSQL 的整合…...

Stable Diffusion 模型下载:GhostMix(幽灵混合)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 GhostMix 是绝对让你惊艳的模型&#xff0c;也是自己认为现在最强的2.5D模型。我认为模型的更新应该是基于现有的画面整体不大变的前提下&#xff0c;提高模型的成…...

django解决Table ‘xx‘ already exists的方法

1&#xff0c;首先看已存在的这个库表结构是什么样的&#xff0c;先让对应的model.py恢复到和他一样的字段 2&#xff0c;删除对应app下的migrations目录里面除__init__.py文件的其他所有文件 3&#xff0c;回到manage.py所在目录执行python manage.py makemigrations 4&#x…...

qt学习:arm摄像头+c调用v412框架驱动+qt调用v412框架驱动 显示摄像头画面

目录 跟内核进行数据通信的函数 编程步骤 c代码 头文件 打开摄像头文件 /dev/videox 获取当前主机上&#xff08;开发板&#xff09;摄像头列表信息 设置当前摄像头的画面格式 比如说 设置 采集图像的宽度为640 高度 480 在内核空间中&#xff0c;申请一个缓冲区队列…...

Linux 36.2@Jetson Orin Nano基础环境构建

Linux 36.2Jetson Orin Nano基础环境构建 1. 源由2. 步骤2.1 安装NVIDIA Jetson Linux 36.2系统2.2 必备软件安装2.3 基本远程环境2.3.1 远程ssh登录2.3.2 samba局域网2.3.3 VNC远程登录 2.4 开发环境安装 3. 总结 1. 源由 现在流行什么&#xff0c;也跟风来么一个一篇。当然&…...

牛客网SQL264:查询每个日期新用户的次日留存率

官网链接&#xff1a; 牛客每个人最近的登录日期(五)_牛客题霸_牛客网牛客每天有很多人登录&#xff0c;请你统计一下牛客每个日期新用户的次日留存率。 有一个登录(login。题目来自【牛客题霸】https://www.nowcoder.com/practice/ea0c56cd700344b590182aad03cc61b8?tpId82 …...

echarts 曲线图自定义提示框

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>曲线图</title><!-- 引入 ECharts 库 -->…...

幻兽帕鲁服务器怎么搭建?Palworld多人联机教程

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…...

DAY39: 动态规划不同路径问题62

Leetcode: 62 不同路径 机器人从(0 , 0) 位置出发&#xff0c;到(m - 1, n - 1)终点。 基本思路 1、确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j] &#xff1a;表示从&#xff08;0 &#xff0c;0&#xff09;出发&#xff0c;到(i, j) 有dp[i][j]条…...

idea开发工具的简单使用与常见问题

1、配置git 选择左上角目录file->setting 打开&#xff0c;Version Control 目录下Git&#xff0c;选择git安装目录下的git.exe文件&#xff1b; 点击test&#xff0c;出现git版本&#xff0c;则表示git识别成功&#xff0c;点击右下角确认即可生效。 2、配置node.js 选…...

使用 WMI 查询安全软件信息

在这篇文章中&#xff0c;我们将详细介绍如何使用 Windows Management Instrumentation (WMI) API 来查询当前计算机上安装的安全软件的基本信息。我们将分析代码的各个部分&#xff0c;并解释每个步骤所涉及的技术和原理。 一、什么是 WMI&#xff1f; WMI 是 Windows Manag…...

创建TextMeshPro字体文件

相比于Unity的Text组件&#xff0c;TextMesh Pro提供了更强大的文本格式和布局控制&#xff0c;更高级的文本渲染技术&#xff0c;更灵活的文本样式和纹理支持&#xff0c;更好的性能以及更易于使用的优点。但unity自带TextMeshPro字体不支持中文。这里使用普通字体文件生成Tex…...