Ajax------免刷新地前后端交互
本文略带PHP代码需要在PHP环境下使用
介绍
AJAX (Asynchronous JavaScript and XML) 是一种创建快速动态网页应用的开发技术,它允许网页在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。例如,在我们做爬虫的时候发现有些页面可以打开图片、视频等资源,但是无论我们怎么查找都无法查到资源的url到底在哪里,这就说明网页很有可能把资源的url藏在了javascript的代码中,通过XMLHttpRequest 对象向后端发送请求,在前端筛选处理信息并呈现出来。
XMLHttpRequest 对象
所有现代浏览器均支持 XMLHttpRequest 对象。XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
在这个html的代码中,我们设置了一个按钮,点击这个按钮就会触发函数ajax(),在ajax函数中,我们首先创建了一个XMLHttpRequest对象,接下来使用我们创建的对象向指定的url发送get请求,在加载完毕后(onreadystatechange)以后就会触发匿名函数,把请求的内容放到id为aj的标签里面。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ajax</title><script>function ajax() {var xhr = new XMLHttpRequest();xhr.onreadystatechange = function() {if (xhr.readyState == 4 && xhr.status == 200) {document.getElementById("aj").innerHTML = xhr.responseText;}}xhr.open("GET", "http://127.0.0.1:8000/a", true);xhr.send();}</script>
</head>
<body><button onclick="ajax()">click me</button><div id="aj"></div>
</body>
</html>
我们创建了一个服务器监听8000端口,并且设置这个网页的url为……/a,但是我们使用浏览器打开html文件以后发现,怎么点击按钮都打不开。
在束手无策的时候,我们不得已打开抓包工具,然后查看console(终端)发现它给我们的提示是:
这个报错给我们的提示大概内容是不允许我们的内容跨站加载(浏览器的同源策略),于是要想访问127.0.0.1:8000我们现在要做的就是把这个html文件也放到对应的url上。为了更快加载这些资源,我们这次选择php语言做服务端。
<?php$request_url = $_SERVER['REQUEST_URI'];$request_url = rtrim($request_url, '/');$request_url = ltrim($request_url, '/') ;switch($request_url){case 'a':echo "Hello from A";break;case 'b':if(file_exists("1.html")){include("1.html"); }else{echo "not found file 1.html";}break;default:echo "404 Not Found";break;}
?>
这个代码的大致思路是通过$_SERVER['REQUEST_URL']获得我们输入的url,在接下来的rtrim和ltrim函数中,我们把获得的url前后的'/'去掉,接下来通过switch根据不同的url向客户端返回不同的网页。之后我们在终端输入php -S 127.0.0.1:8000 filename.php这样我们的服务器就会运行在指定的端口。
再在终端打开测试即可。
接下来我们点击按钮后发现,浏览器没有刷新页面就给我们加载出来了想要的信息。
onkeyup
在上面的代码中,我们每次点击按钮都会给我们进行一次请求,但是这样使用起来显然有点麻烦,我们如果输入某些验证类的东西,每次都要重新点击会加重我们的负担,那么在html标签中给我们准备了onkeyup,让我们可以改变输入的值以后就会被浏览器检测到,进而让我们不再需要点击,而是直接输入改变值就可以和后端对接。
onkeyup 是一个HTML事件属性,用于在用户释放键盘上的某个键时触发指定的 JavaScript 函数或代码。这个事件通常用于捕获用户在输入框中输入的内容,并在用户停止输入时执行某些操作,例如实时搜索、验证输入或动态更新页面内容。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>sub</title><script>function showHint(str) {if (str.length == 0) {document.getElementById("hint").innerHTML = "";return;} else {var xmlhttp = new XMLHttpRequest();xmlhttp.onreadystatechange = function() {if (this.readyState == 4 && this.status == 200) {document.getElementById("hint").innerHTML = this.responseText;}};xmlhttp.open("GET", "http://127.0.0.1:8000/sub?id=" + str, true);xmlhttp.send();}}</script>
</head>
<body><input type="text" onkeyup="showHint(this.value)"><div id = "hint"></div>
</body>
</html>
在测试的过程中,我做了这样的一个前端代码,有一个文本输入的input我们每次输入数据都可以触发函数showHint()。接下来我们看一下服务端怎么构造。
<?php$request_url = $_SERVER['REQUEST_URI'];$request_url = rtrim($request_url, '/');$parsed_url = parse_url($request_url);$path = $parsed_url['path'] ?? '';$query = $parsed_url['query'] ?? '';$path = ltrim($path, '/');switch($path){case 'a':echo "Hello from A";break;case 'b':if(file_exists("1.html")){include("1.html"); }else{echo "not found file 1.html";}break;case 'sub':parse_str($query, $query_params);$id = $query_params['id'] ?? '';if(!isset($id) || empty($id)){include("2.html");}else if($id === '1'){echo "这是1";}else if($id === '2'){echo "这是2";}else{echo "not found";}break;default:echo "404 Not Found";break;}
?>
在这个代码中,我们输入的url为……/sub时就会呈现html文件,里面是一个输入框。我们可以传入参数,html文件会给我们的服务端发送带着id参数的请求,而不同的id则会触发不同的提示。
fetch函数
Fetch API 是一种现代的、功能强大的网络请求工具,它允许你通过 JavaScript 异步地请求资源,而不需要使用传统的 XMLHttpRequest 对象。Fetch API 可以简洁地发起 HTTP 请求,并处理服务器的响应。Fetch API 基于 Promise 设计,使得异步操作更加简洁和易于理解。
fetch函数的使用会让你的代码更加易读,使用它处理url会让代码更加优雅。它的基本使用方法是:
fetch(url).then(response => response.json()) // 解析 JSON 数据.then(data => console.log(data)) // 处理数据.catch(error => console.error('Error:', error)); // 错误处理
我们按照这种方法修改一下2.html的代码。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>sub</title><script>function showHint(str) {if (str.length == 0) {document.getElementById("hint").innerHTML = "";return;} else {fetch("http://127.0.0.1:8000/sub?id=" + str).then(response => response.json()).then(data => {document.getElementById("hint").innerHTML = data.result;}).catch(error => console.log(error));}}</script>
</head>
<body><input type="text" onkeyup="showHint(this.value)"><div id = "hint"></div>
</body>
</html>
注意:一定要按照1.加载数据2.处理数据3.捕获异常的顺序,1和2不能合并在一起,因为js没有多线程的编程方法,这就导致了它的异步工作处理非常发达,如果1和2写在一起,就会导致,数据还没有从服务器发过来就被开始处理,这通常会导致报错。
测试后发现和之前相同,能正常使用
相关文章:
Ajax------免刷新地前后端交互
本文略带PHP代码需要在PHP环境下使用 介绍 AJAX (Asynchronous JavaScript and XML) 是一种创建快速动态网页应用的开发技术,它允许网页在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。例如,在我们做爬虫的时候发现有些…...
python办公自动化---pdf文件的读取、添加水印
需要安装包:pdfminer、pypdf2 一、读取pdf中的内容 from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterprete…...
下一代数据架构全景:云原生实践、行业解法与 AI 底座 | Databend Meetup 成都站回顾
3 月底,Databend 2025 开年首场 Meetup 在成都多点公司成功举办!活动特别邀请到四位重量级嘉宾:多点科技数据库架构师王春涛、多点DMALL数据平台负责人李铭、Databend联合创始人吴炳锡,以及鹏城实验室王璞博士。在春日的蓉城&…...
Kubernetes容器编排与云原生实践
第一部分:Kubernetes基础架构与核心原理 第1章 容器技术的演进与Kubernetes的诞生 1.1 虚拟化技术的三次革命 物理机时代:资源浪费严重,利用率不足15% 虚拟机突破:VMware与Hyper-V实现硬件虚拟化,利用率提升至50% …...
vue项目使用html2canvas和jspdf将页面导出成PDF文件
一、需求: 页面上某一部分内容需要生成pdf并下载 二、技术方案: 使用html2canvas和jsPDF插件 三、js代码 // 页面导出为pdf格式 import html2Canvas from "html2canvas"; import jsPDF from "jspdf"; import { uploadImg } f…...
JAVA实现在H5页面中点击链接直接进入微信小程序
在普通的Html5页面中如何实现点击URL链接直接进入微信小程序,不需要扫描小程序二维码? 网上介绍的很多方法是在小程序后台设置Schema,不过我进入我的小程序后台在开发设置里面 没有找到设置小程序Schema的地方,我是通过调用API接口…...
深入剖析 Kafka 的零拷贝原理:从操作系统到 Java 实践
Kafka 作为一款高性能的分布式消息系统,其卓越的吞吐量和低延迟特性得益于多种优化技术,其中“零拷贝”(Zero-Copy)是核心之一。零拷贝通过减少用户态与内核态之间的数据拷贝,提升了 Kafka 在消息传输中的效率。本文将…...
深度学习:AI 大模型时代的智能引擎
当 Deepspeek 以逼真到难辨真假的语音合成和视频生成技术横空出世,瞬间引发了全球对 AI 伦理与技术边界的激烈讨论。从伪造名人演讲、制造虚假新闻,到影视行业的特效革新,这项技术以惊人的速度渗透进大众视野。但在 Deepspeek 强大功能的背后…...
【Flask开发】嘿马文学web完整flask项目第4篇:4.分类,4.分类【附代码文档】
教程总体简介:2. 目标 1.1产品与开发 1.2环境配置 1.3 运行方式 1.4目录说明 1.5数据库设计 2.用户认证 Json Web Token(JWT) 3.书架 4.1分类列表 5.搜索 5.3搜索-精准&高匹配&推荐 6.小说 6.4推荐-同类热门推荐 7.浏览记录 8.1配置-阅读偏好 8.配置 9.1项目…...
【MySQL】002.MySQL数据库基础
文章目录 数据库基础1.1 什么是数据库1.2 基本使用创建数据库创建数据表表中插入数据查询表中的数据 1.3 主流数据库1.4 服务器,数据库,表关系1.5 MySQL架构1.6 SQL分类1.7 存储引擎1.7.1 存储引擎1.7.2 查看存储引擎1.7.3 存储引擎对比 前言:…...
Python爬取视频的架构方案,Python视频爬取入门教程
文章目录 前言方案概述架构设计详细实现步骤1.环境准备2. 网页请求模块3. 网页解析模块4. 视频下载模块5. 异常处理与日志模块 代码示例:性能优化注意事项 前言 以下是一个全面的使用 Python 爬取视频的架构方案,包含方案概述、架构设计、详细实现步骤、…...
ERC-20 代币标准
文章目录 一、什么是 ERC-20?核心价值:互操作性简化开发生态基石 二、ERC-20 的六大核心功能基础功能授权与代理转账事件通知 三、ERC-20 代币的典型应用场景四、ERC-20 的技术优势与局限性优势:局限性: 五、ERC-20 代币的创建步骤…...
SpringBoot实战1
SpringBoot实战1 一、开发环境,环境搭建-----创建项目 通过传统的Maven工程进行创建SpringBoot项目 (1)导入SpringBoot项目开发所需要的依赖 一个父依赖:(工件ID为:spring-boot-starter-parent…...
GSO-YOLO:基于全局稳定性优化的建筑工地目标检测算法解析
论文地址:https://arxiv.org/pdf/2407.00906 1. 论文概述 《GSO-YOLO: Global Stability Optimization YOLO for Construction Site Detection》提出了一种针对建筑工地复杂场景优化的目标检测模型。通过融合全局优化模块(GOM)、稳定捕捉模块(SCM)和创新的AIoU损失函…...
解读json.loads函数参数
json.loads()函数是解码JSON字符串为Python对象的核心工具。本文将深入探讨json.loads()函数的各个参数。 一、基本功能与输入类型 1. 功能概述 json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=N…...
2025.04.10-拼多多春招笔试第一题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 神奇公园的福娃占卜 问题描述 LYA在一个神奇的公园里发现了一条特殊的小径,小径上排列着一群可爱的福娃玩偶。这条小径有 n n...
【学习笔记】CPU 的“超线程”是什么?
1. 什么是超线程? 超线程(Hyper-Threading)是Intel的技术,让一个物理CPU核心模拟出两个逻辑核心。 效果:4核CPU在系统中显示为8线程。 本质:通过复用空闲的硬件单元(如ALU、FPU)&a…...
Docker Harbor
下载Harbor安装包 wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz 解压安装包 tar xvf harbor-offline-installer-v2.5.0.tgz cd harbor 配置harbor vi harbor.yml hostname: registry.example.com # Harbor …...
天梯集训笔记整理
1.着色问题 直接标注哪些行和列是被标注过的,安全格子的数量就是未标注的行*列 #include <bits/stdc.h> using namespace std;const int N 1e510; int hang[N],lie[N];int main(){int n,m;cin>>n>>m;int q;cin>>q;while(q--){int x,y;ci…...
C语言复习笔记--指针(4)
在经过前几篇的复习后我们已经了解了大部分指针的类型,今天让我们继续复习指针的其他内容吧. 函数指针变量 函数指针变量的创建 什么是函数指针变量呢?函数指针变量应该是⽤来存放函数地址的,未来通过地址能够调⽤函数的。 那么函数是否有地址呢&#x…...
008二分答案+贪心判断——算法备赛
二分答案贪心判断 有些问题,从已知信息推出答案,细节太多,过程繁杂,不易解答。 从猜答案出发,贪心地判断该答案是否合法是个不错的思路,这要求所有可能的答案是单调的(例:x满足条件…...
Netty之内存池的原理和实战
深入理解Netty的内存池机制及其应用实践 在高性能网络编程中,内存管理对于系统的稳定性和性能至关重要。Netty作为一个高效的网络通信框架,通过引入内存池机制有效地解决了内存分配和回收频繁带来的性能瓶颈和内存碎片问题。本文将深入探讨Netty内存池的…...
Elasticsearch 向量数据库,原生支持 Google Cloud Vertex AI 平台
作者:来自 Elastic Valerio Arvizzigno Elasticsearch 将作为第一个第三方原生语义对齐引擎,支持 Google Cloud 的 Vertex AI 平台和 Google 的 Gemini 模型。这使得联合用户能够基于企业数据构建完全可定制的生成式 AI 体验,并借助 Elastics…...
《算法笔记》3.1小节——入门模拟->简单模拟
1001 害死人不偿命的(3n1)猜想 #include <iostream> using namespace std;int main() {int n,count0;cin>>n;while(n!1){if(n%20) n/2;else n(3*n1)/2;count1;}std::cout <<count;return 0; }1032 挖掘机技术哪家强 #include <iostream> using namespa…...
每日一题(小白)暴力娱乐篇24
由题已知这是一个匹配题目,题目已经说了三阶幻方是给定的,经过镜像和旋转,镜像*2旋转*4; 总共八种方案,然后接收每次的数据去匹配(跳过0),如果匹配就输出匹配的数组,如果…...
C++:函数模板类模板
程序员Amin 🙈作者简介:练习时长两年半,全栈up主 🙉个人主页:程序员Amin 🙊 P S : 点赞是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全…...
第18章:基于Global Context Vision Transformers(GCTx_unet)网络实现的oct图像中的黄斑水肿和裂孔分割
1. 网络概述 GCTx-UNET是基于传统UNet架构的改进版本,主要引入了以下几个关键创新: GCT模块:全局上下文变换器(Global Context Transformer)模块 多尺度特征融合:增强的特征提取能力 改进的跳跃连接:优化编码器与解…...
深入理解 Spring 的 MethodParameter 类
MethodParameter 是 Spring 框架中一个非常重要的类,它封装了方法参数(或返回类型)的元数据信息。这个类在 Spring MVC、AOP、数据绑定等多个模块中都有广泛应用。 核心功能 MethodParameter 主要提供以下功能: 获取参数类型信息…...
Docker部署HivisionIDPhotos1分钟生成标准尺寸证件照实操指南
文章目录 前言1. 安装Docker2. 本地部署HivisionIDPhotos3. 简单使用介绍4. 公网远程访问制作照片4.1 内网穿透工具安装4.2 创建远程连接公网地址 5. 配置固定公网地址 前言 相信大部分人办驾照、护照或者工作证时都得跑去照相馆,不仅费时还担心个人信息泄露。好消…...
python多线程+异步编程让你的程序运行更快
多线程简介 多线程是Python中实现并发编程的重要方式之一,它允许程序在同一时间内执行多个任务。在某些环境中使用多线程可以加快我们代码的执行速度,例如我们通过爬虫获得了一个图片的url数组,但是如果我们一个一个存储很明显会非常缓慢&…...
HDCP(五)
HDCP 2.2 测试用例设计详解 基于HDCP 2.2 CTS v1.1规范及协议核心机制,以下从正常流程与异常场景两大方向拆解测试用例设计要点,覆盖认证、密钥管理、拓扑验证等关键环节: 1. 正常流程测试 1.1 单设备认证 • 测试目标:验证源设…...
datagrip如何连接数据库
datagrip连接数据库的步骤 2025版本 想要链接数据库是需要一个jar包的,所以将上面进行删除之后,需要下载一个jar包 那么这个时候需要链接上传一个mysql链接的jar包 选择核心驱动类 上述操作完成之后,然后点击apply再点击ok即可 如下图说明my…...
Spring Boot 自动配置与启动原理全解析
下面分两部分系统讲解: 第一部分:Spring Boot 自动配置原理(核心是自动装配) 一、Spring Boot 的自动配置是干嘛的? 传统 Spring 开发时,你要写一堆 XML 或配置类,非常麻烦。Spring Boot 引入…...
python 基础:句子缩写
n int(input()) for _ in range(n):words input().split()result ""for word in words:result word[0].upper()print(result)知识点讲解 input()函数 用于从标准输入(通常是键盘)读取用户输入的内容。它返回的是字符串类型。例如在代码中…...
QML 中 Z 轴顺序(z 属性)
在 QML 中,z 属性用于控制元素的堆叠顺序(Z 轴顺序),决定元素在视觉上的前后层次关系。 基本概念 默认行为: 所有元素的默认 z 值为 0 同层级元素后声明的会覆盖先声明的 父元素的 z 值会影响所有子元素 核心规则…...
Redis快的原因
1、基于内存实现 Redis将所有数据存储在内存中,因此它可以非常快速地读取和写入数据,而无需像传统数据库那样将数据从磁盘读取和写入磁盘,这样也就不受I/O限制。 2、I/O多路复用 多路指的是多个socket连接;复用指的是复用一个线…...
蓝桥杯c ++笔记(含算法 贪心+动态规划+dp+进制转化+便利等)
蓝桥杯 #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; //常使用的头文件动态规划 小蓝在黑板上连续写下从 11 到 20232023 之间所有的整数,得到了一个数字序列: S12345…...
每日算法-250410
今天分享两道 LeetCode 题目,它们都可以巧妙地利用二分查找来解决。 275. H 指数 II 问题描述 思路:二分查找 H 指数的定义是:一个科学家有 h 篇论文分别被引用了至少 h 次。 题目给定的 citations 数组是升序排列的。这为我们使用二分查找…...
swagger + Document
swagger 虽然有了api接口,对于复杂接口返回值说明,文档还是不能少。如果是一个人做的还简单一点,现在都搞前后端分离,谁知道你要取那个值呢...
线程同步与互斥(下)
线程同步与互斥(中)https://blog.csdn.net/Small_entreprene/article/details/147003513?fromshareblogdetail&sharetypeblogdetail&sharerId147003513&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link我们学习了互斥…...
MySQL 优化教程:让你的数据库飞起来
文章目录 前言一、数据库设计优化1. 合理设计表结构2. 范式化与反范式化3. 合理使用索引 二、查询优化1. 避免使用 SELECT *2. 优化 WHERE 子句3. 优化 JOIN 操作 三、服务器配置优化1. 调整内存分配2. 调整并发参数3. 优化磁盘 I/O 四、监控与分析1. 使用 EXPLAIN 分析查询语句…...
SD + Contronet,扩散模型V1.5+约束条件后续优化:保存Canny边缘图,便于视觉理解——stable diffusion项目学习笔记
目录 前言 背景与需求 代码改进方案 运行过程: 1、Run编辑 2、过程: 3、过程时间线: 4、最终效果展示: 总结与展望 前言 机器学习缺点之一:即不可解释性。最近,我在使用stable diffusion v1.5 Co…...
位掩码、哈希表、异或运算、杨辉三角、素数查找、前缀和
1、位掩码 对二进制数操作的方法,(mask1<<n),将数mask的第n位置为1,其它位置为0,即1000...2^n,当n较小时,可以用于解决类似于0/1背包的问题,要么是0,要么是1&…...
安装OpenJDK1.8 17 (macos M芯片)
安装OpenJDK 1.8 下载完后,解压,打开 环境变量的配置文件即可 vim ~/.zshrc #export JAVA_HOME/Users/xxxxx/jdk-21.jdk/Contents/Home #export JAVA_HOME/Users/xxxxx/jdk-17.jdk/Contents/Home #export JAVA_HOME/Users/xxxxx/jdk-11.jdk/Contents…...
Spring Boot 自动加载流程详解
前言 Spring Boot 是一个基于约定优于配置理念的框架,它通过自动加载机制大大简化了开发者的配置工作。本文将深入探讨 Spring Boot 的自动加载流程,并结合源码和 Mermaid 图表进行详细解析。 一、Spring Boot 自动加载的核心机制 Spring Boot 的自动加…...
2025 年“认证杯”数学中国数学建模网络挑战赛 C题 化工厂生产流程的预测和控制
流水线上也有每个位置的温度、压力、流量等诸多参数。只有参数处于正常范 围时,最终的产物才是合格的。这些参数很容易受到外部随机因素的干扰,所 以需要实时调控。但由于参数众多,测量困难,很多参数想要及时调整并不容 易&#x…...
Richardson-Lucy (RL) 反卷积算法 —— 通过不断迭代更新图像估计值
文章目录 一、RL反卷积算法(1)主要特点(2)基本原理(3)关键步骤(4)优化算法 二、项目实战(1)RL 反卷积(2)优化:RL 反卷积 …...
2025.04.10-拼多多春招笔试第四题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 04. 优惠券最优分配问题 问题描述 LYA是一家电商平台的运营经理,负责促销活动的策划。现在平台上有 n n n...
------------------V2024-2信息收集完结------------------
第二部分信息收集完结撒花*★,*:.☆( ̄▽ ̄)/$:*.★* 。 进入开发部分,工具要求:phpstorm Adobe Navicat16 小皮 准备完毕 php开发起飞起飞~~~~~...
Java Lambda与方法引用:函数式编程的颠覆性实践
在Java 8引入Lambda表达式和方法引用后,函数式编程范式彻底改变了Java开发者的编码习惯。本文将通过实战案例和深度性能分析,揭示如何在新项目中优雅运用这些特性,同时提供传统代码与函数式代码的对比优化方案。 文章目录 一、Lambda表达式&a…...