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

[前端系列第6弹]Ajax简明教程:轻松实现Web页面的异步交互

在这篇文章中,我将介绍Ajax的基本概念、原理、优缺点、实现方法和应用场景,以及如何使用它来实现Web页面的异步交互。还将给一些简单而实用的例子,让你可以跟着我一步一步地编写自己的Ajax代码。

目录

一、什么是Ajax

二、如何使用Ajax

(一)JavaScript中使用Ajax

(二)JQuery中使用Ajax

三、Ajax的应用场景

(一)表单验证

(二)自动补全

(三)无刷新分页

(四)即时聊天

(五)在线地图


一、什么是Ajax

        Ajax是Asynchronous JavaScript and XML(异步JavaScript和XML)的缩写,它是一种Web技术,可以让浏览器与服务器进行数据交换,并在不刷新整个页面的情况下更新部分页面内容。

Ajax的优点是:

  • Ajax可以提高Web页面的性能和用户体验,因为它可以减少服务器请求的次数和数据量,以及避免页面刷新带来的闪烁和延迟。
  • Ajax可以实现Web页面与服务器之间的实时通信,因为它可以在后台与服务器进行数据交换,而不影响用户对页面的操作。
  • Ajax可以实现Web页面与用户之间的动态交互,因为它可以根据用户输入或事件来更新页面内容,而不需要提交表单或跳转页面。

Ajax的缺点是:

  • Ajax可能会增加Web开发的复杂度和难度,因为它需要考虑浏览器兼容性、错误处理、安全性等问题。
  • Ajax可能会影响Web页面的可访问性和可用性,因为它可能导致浏览器后退按钮失效、地址栏URL不变化、搜索引擎索引不到等问题。
  • Ajax可能会消耗更多的客户端资源和带宽,因为它需要加载更多的JavaScript代码和发送更多的HTTP请求。

Ajax的示例:

// 创建一个XMLHttpRequest对象
var xhr = new XMLHttpRequest();// 设置请求方法、URL和异步标志
xhr.open("GET", "data.txt", true);// 设置请求状态变化时的回调函数
xhr.onreadystatechange = function() {// 判断请求是否完成并成功if (xhr.readyState == 4 && xhr.status == 200) {// 获取服务器返回的文本数据var data = xhr.responseText;// 在页面中显示数据document.getElementById("content").innerHTML = data;}
};// 发送请求
xhr.send();

二、如何使用Ajax

        要使用Ajax,需要了解一些基本的概念和步骤,如XMLHttpRequest对象、HTTP请求和响应、JSON格式等。以下是一些常用的编程语言如何进行Ajax的示例:

(一)JavaScript中使用Ajax

        JavaScript是最早支持和使用Ajax的编程语言,它提供了一个内置的对象:XMLHttpRequest。XMLHttpRequest对象可以让你创建和发送HTTP请求,并在后台接收服务器返回的数据。一个JavaScript中进行Ajax的示例如下:

// 创建一个XMLHttpRequest对象
var xhr = new XMLHttpRequest();// 设置请求方法、URL和异步标志
xhr.open("GET", "data.txt", true);// 设置请求状态变化时的回调函数
xhr.onreadystatechange = function() {// 判断请求是否完成并成功if (xhr.readyState == 4 && xhr.status == 200) {// 获取服务器返回的文本数据var data = xhr.responseText;// 在页面中显示数据document.getElementById("content").innerHTML = data;}
};// 发送请求
xhr.send();

        这个示例是一个简单的Ajax代码,它向服务器发送一个GET请求,获取data.txt文件中的文本数据,并在页面中显示。如果运行这个代码,你会看到页面中没有刷新,但是内容却更新了。

(二)JQuery中使用Ajax

        jQuery是一个轻量级的JavaScript库,它封装了JavaScript的常用功能,并提供了一种简洁而易用的接口。jQuery提供了一系列的方法,可以你方便地使用Ajax进行数据交互,如ajax(), get(), post(), load()等。一个jQuery中进行Ajax的示例如下:

// 使用ajax()方法向服务器发送一个GET请求,获取data.json文件中的JSON数据,并在成功时打印出来
$.ajax({url: "data.json",type: "GET",dataType: "json",success: function(data) {console.log(data);}
});// 使用get()方法向服务器发送一个GET请求,获取data.json文件中的JSON数据,并在成功时打印出来,等同于使用ajax()方法
$.get("data.json", function(data) {console.log(data);
});// 使用post()方法向服务器发送一个POST请求,传递一个包含name和age两个参数的对象,并在成功时打印出服务器返回的数据
$.post("data.php", {name: "Alice", age: 25}, function(data) {console.log(data);
});// 使用load()方法向服务器发送一个GET请求,获取data.html文件中的HTML内容,并将其加载到id为content的元素中
$("#content").load("data.html");

        这些示例都是使用jQuery来实现Ajax功能的代码,它们都可以在不刷新页面的情况下与服务器进行数据交换,并根据返回的数据更新页面内容。

三、Ajax的应用场景

        Ajax可以应用于很多Web页面的动态功能,如表单验证、自动补全、无刷新分页、即时聊天、在线地图等。以下是一些常见的Ajax应用场景的示例:

(一)表单验证

        表单验证是指在用户提交表单之前,对表单中的输入数据进行合法性和正确性的检查,以避免错误或恶意的数据被发送到服务器。使用Ajax可以实现实时的表单验证,即在用户输入数据时,就向服务器发送请求,验证数据是否有效,并在页面中显示提示信息。这样可以提高用户体验和数据安全性。一个表单验证的示例如下:

<html>
<head><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script>// 定义一个函数,用于向服务器发送Ajax请求,验证用户名是否已存在function checkUsername() {// 获取用户名输入框的值var username = $("#username").val();// 判断用户名是否为空if (username == "") {// 清空提示信息$("#message").html("");} else {// 使用get()方法向服务器发送一个GET请求,传递username参数,并在成功时显示服务器返回的信息$.get("check.php", {username: username}, function(data) {$("#message").html(data);});}}</script>
</head>
<body><form><p>用户名:<input type="text" id="username" onkeyup="checkUsername()"></p><p id="message"></p><p>密码:<input type="password" id="password"></p><p><input type="submit" value="注册"></p></form>
</body>
</html>

        这个示例是一个简单的表单验证代码,它使用Ajax向服务器发送请求,验证用户名是否已存在,并在页面中显示提示信息。如果运行这个代码,会看到当你在用户名输入框中输入数据时,就会有相应的信息显示出来。

(二)自动补全

        自动补全是指在用户输入数据时,根据用户输入的部分内容,向服务器请求并显示相关的候选内容,让用户可以快速地选择或输入完整的内容。使用Ajax可以实现实时的自动补全,即在用户输入数据时,就向服务器发送请求,获取并显示候选内容。这样可以提高用户体验和输入效率。一个自动补全的示例如下:

<html>
<head><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script>// 定义一个函数,用于向服务器发送Ajax请求,获取与输入内容相关的候选内容,并显示在下拉列表中function autocomplete() {// 获取输入框的值var keyword = $("#keyword").val();// 判断输入框是否为空if (keyword == "") {// 隐藏下拉列表$("#list").hide();} else {// 使用get()方法向服务器发送一个GET请求,传递keyword参数,并在成功时显示服务器返回的数据$.get("search.php", {keyword: keyword}, function(data) {// 显示下拉列表$("#list").show();// 将服务器返回的数据设置为下拉列表的内容$("#list").html(data);});}}</script>
</head>
<body><form><p>搜索:<input type="text" id="keyword" onkeyup="autocomplete()"></p><p><input type="submit" value="搜索"></p></form><div id="list" style="display: none;"></div>
</body>
</html>

        这个示例是一个简单的自动补全代码,它使用Ajax向服务器发送请求,获取与输入内容相关的候选内容,并在页面中显示。如果运行这个代码,会看到当你在搜索框中输入数据时,就会有相应的候选内容显示出来。

(三)无刷新分页

        无刷新分页是指在Web页面中显示一部分数据,当用户点击下一页或上一页时,不刷新整个页面,而是向服务器请求并显示另一部分数据。使用Ajax可以实现无刷新分页,即在用户点击分页按钮时,就向服务器发送请求,获取并显示相应的数据。这样可以提高Web页面的性能和用户体验。一个无刷新分页的示例如下:

<html>
<head><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script>// 定义一个变量,用于存放当前页码,默认为1var page = 1;// 定义一个函数,用于向服务器发送Ajax请求,获取并显示指定页码的数据function showPage(page) {// 使用get()方法向服务器发送一个GET请求,传递page参数,并在成功时显示服务器返回的数据$.get("page.php", {page: page}, function(data) {// 将服务器返回的数据设置为id为content的元素的内容$("#content").html(data);});}// 定义一个函数,用于处理上一页按钮的点击事件function prevPage() {// 判断当前页码是否大于1if (page > 1) {// 将当前页码减1page--;// 调用showPage()函数,显示上一页的数据showPage(page);}}// 定义一个函数,用于处理下一页按钮的点击事件function nextPage() {// 判断当前页码是否小于总页数(这里假设总页数为5)if (page < 5) {// 将当前页码加1page++;// 调用showPage()函数,显示下一页的数据showPage(page);}}// 在文档加载完成后调用showPage()函数,显示第一页的数据$(document).ready(function() {showPage(page);});</script>
</head>
<body><div id="content"></div><button onclick="prevPage()">上一页</button><button onclick="nextPage()">下一页</button>
</body>
</html>

        这个示例是一个简单的无刷新分页代码,它使用Ajax向服务器发送请求,获取并显示指定页码的数据,并在页面中提供上一页和下一页按钮。如果运行这个代码,会看到当你点击分页按钮时,页面中只有表格部分更新了。

(四)即时聊天

        即时聊天是指在Web页面中实现用户之间的实时通信,让用户可以发送和接收文本、图片、音频、视频等信息。使用Ajax可以实现即时聊天,即在用户发送或接收信息时,就向服务器发送或请求数据,并在页面中显示。这样可以提高Web页面的交互性和社交性。一个即时聊天的示例如下:

<html>
<head><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script>// 定义一个变量,用于存放最后一条消息的ID,默认为0var lastId = 0;// 定义一个函数,用于向服务器发送Ajax请求,获取并显示新的消息function getMessages() {// 使用get()方法向服务器发送一个GET请求,传递lastId参数,并在成功时显示服务器返回的数据$.get("chat.php", {lastId: lastId}, function(data) {// 判断服务器返回的数据是否为空if (data != "") {// 将服务器返回的数据追加到id为messages的元素中$("#messages").append(data);// 获取最后一条消息的ID,并赋值给lastId变量lastId = $("#messages li:last").attr("id");// 将id为messages的元素滚动到底部,以显示最新的消息$("#messages").scrollTop($("#messages")[0].scrollHeight);}});}// 定义一个函数,用于向服务器发送Ajax请求,发送用户输入的消息function sendMessage() {// 获取用户输入框的值var message = $("#message").val();// 判断用户输入框是否为空if (message != "") {// 使用post()方法向服务器发送一个POST请求,传递message参数,并在成功时清空用户输入框$.post("chat.php", {message: message}, function(data) {$("#message").val("");});}}// 在文档加载完成后调用getMessages()函数,获取并显示新的消息$(document).ready(function() {getMessages();});// 每隔一秒调用getMessages()函数,获取并显示新的消息setInterval(getMessages, 1000);// 在用户输入框按下回车键时调用sendMessage()函数,发送用户输入的消息$("#message").keydown(function(event) {if (event.keyCode == 13) {sendMessage();}});// 在发送按钮点击时调用sendMessage()函数,发送用户输入的消息$("#send").click(function() {sendMessage();});</script>
</head>
<body><div id="chat"><ul id="messages"></ul><input type="text" id="message" placeholder="请输入消息"><button id="send">发送</button></div>
</body>
</html>

        这个示例是一个简单的即时聊天代码,它使用Ajax向服务器发送或请求数据,并在页面中显示。如果运行这个代码,会看到当你或其他用户发送或接收消息时,页面中只有消息列表部分更新了。

(五)在线地图

        在线地图是指在Web页面中显示地理位置、路线、交通、景点等信息,让用户可以浏览和查询地图数据。使用Ajax可以实现在线地图,即在用户拖动或缩放地图时,就向服务器请求并显示相应的地图数据。这样可以提高Web页面的功能性和实用性。一个在线地图的示例如下:

<html>
<head><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script src="https://api.map.baidu.com/api?v=3.0&ak=your_ak"></script><script>// 定义一个变量,用于存放百度地图对象var map;// 定义一个函数,用于初始化百度地图function initMap() {// 创建一个百度地图对象,并设置中心点和缩放级别map = new BMap.Map("map");map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);// 启用滚轮缩放功能map.enableScrollWheelZoom(true);// 添加一个导航控件map.addControl(new BMap.NavigationControl());// 添加一个比例尺控件map.addControl(new BMap.ScaleControl());// 添加一个缩略图控件map.addControl(new BMap.OverviewMapControl());// 添加一个地图类型控件map.addControl(new BMap.MapTypeControl());}// 定义一个函数,用于向服务器发送Ajax请求,获取并显示指定位置的天气信息function getWeather(point) {// 使用get()方法向服务器发送一个GET请求,传递point参数,并在成功时显示服务器返回的数据$.get("weather.php", {point: point}, function(data) {// 将服务器返回的数据设置为id为weather的元素的内容$("#weather").html(data);});}// 在文档加载完成后调用initMap()函数,初始化百度地图$(document).ready(function() {initMap();});// 在百度地图对象添加拖动结束事件的监听器,当用户拖动地图时调用getWeather()函数,获取并显示当前中心点的天气信息map.addEventListener("dragend", function() {var center = map.getCenter();var point = center.lng + "," + center.lat;getWeather(point);});</script>
</head>
<body><div id="map" style="width: 800px; height: 600px;"></div><div id="weather"></div>
</body>
</html>

        这个示例是一个简单的在线地图代码,它使用Ajax向服务器发送请求,获取并显示指定位置的天气信息,并在页面中提供百度地图。如果运行这个代码,会看到当你拖动或缩放地图时,页面中只有天气信息部分更新了。


以上就是本文的全部内容啦,学习学习~

相关文章:

[前端系列第6弹]Ajax简明教程:轻松实现Web页面的异步交互

在这篇文章中&#xff0c;我将介绍Ajax的基本概念、原理、优缺点、实现方法和应用场景&#xff0c;以及如何使用它来实现Web页面的异步交互。还将给一些简单而实用的例子&#xff0c;让你可以跟着我一步一步地编写自己的Ajax代码。 目录 一、什么是Ajax 二、如何使用Ajax &a…...

ssh-keygen 做好免密登录后不生效

免密说明 通常情况下&#xff0c;我们ssh到其他服务器需要知道服务器的用户名和密码。对于需要经常登录的服务器每次都输入密码比较麻烦&#xff0c;因此我们可以在两台服务器上做免密登录&#xff0c;即在A服务器可以免密登录B服务器。 在A服务器上登录B服务器时&#xff0c;…...

【Java可执行命令】(十八)可视化监控和管理工具 jconsole:获取 JVM的内存使用情况、线程活动、GC 行为等重要指标的可视化工具 ~

Java可执行命令之jconsole 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.2 注意事项 4️⃣ 应用场景&#x1f33e; 总结 1️⃣ 概念 jconsole 是 Java Development Kit (JDK) 自带的一款图形化监控和管理工具。它旨在提供一个简单而强大的界面&#xff0c;用于监视和管…...

leetcode做题笔记66

给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 思路一&#xff1a;模拟题意 int* plusOne(i…...

【docker】设置 docker 国内镜像报错,解决方案

一、报错&#xff1a; [rootlocalhost ~]# systemctl restart docker Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.二、原因&#xf…...

mac安装nvm管理工具遇到的问题和解决方法

nvm 是一款可以管理多版本node的工具&#xff0c;因为是刚买没多久的电脑之前用的都是windows&#xff0c;昨天折腾了一下午终于倒腾好了 第一步&#xff1a; 卸载电脑已有的node&#xff1b;访问nvm脚本网址&#xff0c;另存为到电脑上任何目录&#xff0c;我是放在桌面上的…...

DocX 生成Word

当然&#xff0c;这里是一个使用DocX库在.NET Core中操作Word文档的简单示例&#xff1a; 首先&#xff0c;确保你在项目中安装了DocX库。你可以在NuGet包管理器中搜索并安装DocX。 然后&#xff0c;使用以下代码来创建一个简单的Word文档并添加一些内容&#xff1a; using …...

数据库新闻速递 -- POSTGRESQL 正在蚕食数据库市场 (翻译)

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加 liuaustin3微信号 &#xff0c;在新加的朋友会分到3群&#xff…...

PAT 1085 Perfect Sequence

个人学习记录&#xff0c;代码难免不尽人意 Sample Input: 10 8 2 3 20 4 5 1 6 7 8 9 Sample Output: 8 #include<cstdio> #include<iostream> #include<vector> #include<algorithm> #include<string> #include<map> #include<cmath&…...

软件测试面试夺命连环十七问,你答得上来么?这都不会建议多学!

1. 给你一个网站&#xff0c;该如何测试&#xff1f;&#xff08;探究需求制订计划&#xff09; 首先&#xff0c;查找需求说明、网站设计等相关文档&#xff0c;分析测试需求。 制定测试计划&#xff0c;确定测试范围和测试策略&#xff0c;一般包括以下几个部分&#xff1a…...

【学习FreeRTOS】第5章——FreeRTOS任务挂起与恢复

1.任务的挂起与恢复的API函数 vTaskSuspend() ——挂起任务&#xff08;类似暂停&#xff0c;可恢复&#xff0c;但删除任务&#xff0c;无法恢复&#xff09;vTaskResume() ——恢复被挂起的任务xTaskResumeFromISR()—— 在中断中恢复被挂起的任务 1.1.任务挂起函数vTaskSu…...

gitblit-使用

1.登入GitBlit服务器 默认用户和密码: admin/admin 2.创建一个新的版本库 点击图中的“版本库”&#xff0c;然后点击图中“创建版本库” 填写名称和描述&#xff0c;注意名称最后一定要加 .git选择限制查看、克隆和推送勾选“加入README”和“加入.gitignore文件”在图中的1处…...

整数中1出现的次数(从1到n整数中1出现的次数)

解题思路1&#xff1a; 设定整数点&#xff08;如1、10、100等等&#xff09;作为位置点i&#xff08;对应n的各位、十位、百位等等&#xff09;&#xff0c;分别对每个数位上有多少包含1的点进行分析。 第一步&#xff1a;对n进行分割&#xff0c;分为两部分&#xff1a;高位…...

Vue2:路由

Vue2&#xff1a;路由 Date: May 28, 2023 Sum: vue-router基本使用、高级用法 单页面应用程序 概念&#xff1a;SPA【Single Page Application】是指所有的功能都在一个html页面上实现 案例&#xff1a; 单页应用网站&#xff1a; 网易云音乐 https://music.163.com/ 多页…...

【Docker】Docker的应用场景,Docker 的优点,Ubuntu Docker 安装,使用 Shell 脚本进行安装

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…...

CentOS7 启动谷歌浏览器 java+Selenium+chrome+chromedriver

前言&#xff1a;自己想使用该技术实现自动化抓取音乐&#xff0c;目前在window上运行成功&#xff0c;需要在Linux Centos服务上跑&#xff0c;配置上出现了许多问题&#xff0c;特此记录。 参考文档&#xff1a;CentOS7 安装Seleniumchromechromedriverjava_远方丿的博客-CSD…...

【无公网IP】在公网环境下Windows远程桌面Ubuntu 18.04

【无公网IP】在公网环境下Windows远程桌面Ubuntu 18.04 文章目录 *【无*公网IP】在公网环境下Windows远程桌面Ubuntu 18.04一、 同个局域网内远程桌面Ubuntu1. 更新软件仓库2. 安装支持包3. 安装XFCE4桌面环境4. 安装XRDP5. 环境设置5.1 XFCE桌面配置5.2 在配置文件中&#xff…...

Java“牵手拼多多商品详情数据采集方法,拼多多API接口申请指南

拼多多详情接口 API 是开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取商品的详细信息&#xff0c;包括商品的标题、描述、图片等信息。在电商平台的开发中&#xff0c;详情接口API是非常常用的 API&#xff0c;因此本文将详细介绍详情接口 API 的使用。 一、拼…...

Leetcode-每日一题【剑指 Offer 15. 二进制中1的个数】

题目 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 1 的个数&#xff08;也被称为 汉明重量).&#xff09;。 提示&#xff1a; 请注意&#xff0c;在某些语言&#xff08;如 Java&…...

docker 怎么搭建

Docker是一种容器化平台&#xff0c;可以快速构建、部署和运行应用程序。以下是Docker的搭建流程&#xff1a; 1. 安装Docker 在官方网站上下载并安装Docker&#xff0c;根据官方指引进行安装。 2. 配置Docker环境&#xff1a; 配置Docker环…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...