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

Web 页面之间传递参数的几种方法

Web 页面之间传递参数的方法有很多种,下面列出一些常见的方法以及它们的代码示例。

一、前端直接传递参数

  • 1、URL 参数传递(query string):通过 URL 的查询字符串(即问号后面的参数)将参数传递给页面。可以通过location.searchURLSearchParams对象来获取和解析参数。
// 发送参数
const params = {id: 123, name: 'Alice'};
const url = `http://example.com/page?${new URLSearchParams(params)}`;
window.location.href = url;// 接收参数
const searchParams = new URLSearchParams(window.location.search);
const id = searchParams.get('id');
const name = searchParams.get('name');

 2、URL hash传递:通过 URL 的 hash 值来传递参数。例如,http://example.com/#/page?id=1可以传递一个名为id的参数。可以通过location.hash来获取和解析hash值中的参数。

// 发送参数
const id = 123;
window.location.hash = `#id=${id}`;// 接收参数
const searchParams = new URLSearchParams(window.location.hash.substring(1));
const id = searchParams.get('id');

 3、URL 路径传递:通过 URL 的路径参数来传递参数。例如,/users/:id可以传递一个名为id的参数。可以通过路由框架(如 React Router)来解析路径参数。

// 发送参数
const id = 123;
window.location.href = `http://example.com/page/${id}`;// 接收参数
const id = parseInt(window.location.pathname.split('/').pop());

 4、JavaScript 变量:通过 JavaScript 变量来传递参数。可以在不同的页面之间共享全局变量,或者在一个页面内使用模块化开发来传递参数。

// 发送参数
const id = 123;
window.myGlobalId = id;// 接收参数
const id = window.myGlobalId;

 5、Cookie:通过在浏览器中存储 Cookie 来传递参数。可以通过document.cookie来读取和设置 Cookie。

// 发送参数
document.cookie = 'id=123; path=/';// 接收参数
const cookies = document.cookie.split(';').map(cookie => cookie.trim().split('='));
const id = cookies.find(cookie => cookie[0] === 'id')[1];

 6、Web 存储:过 HTML5 的localStoragesessionStorage来在浏览器中存储数据。可以通过localStorage.getItem()localStorage.setItem()等方法来读取和设置存储的值。

// 发送参数
localStorage.setItem('id', 123);// 接收参数
const id = localStorage.getItem('id');

 7、自定义事件:通过自定义事件来在不同的组件之间传递数据。可以通过CustomEvent对象来定义和触发自定义事件,通过element.dispatchEvent()方法来触发事件。

// 发送参数
const event = new CustomEvent('myEvent', {detail: {id: 123, name: 'Alice'}});
document.dispatchEvent(event);// 接收参数
document.addEventListener('myEvent', event => {const {id, name} = event.detail;
});

 

二、后端间接传递参数

  • 8、表单提交:过表单的提交将表单中的数据传递给后台服务器或其他页面。可以通过form元素的submit方法或XMLHttpRequest对象来实现表单提交。
    <!-- 发送参数 -->
    <form method="POST" action="http://example.com/page"><input type="text" name="id" value="123"><input type="text" name="name" value="Alice"><button type="submit">提交</button>
    </form><!-- 接收参数 -->
    <?php
    $id = $_POST['id'];
    $name = $_POST['name'];
    ?>

    9、WebSocket:通过 WebSocket 协议在浏览器和服务器之间实时传递数据。可以使用 WebSocket API 来建立 WebSocket 连接,并通过WebSocket.send()方法来发送数据。

// 发送参数
const id = 123;
const ws = new WebSocket('ws://example.com');
ws.onopen = () => ws.send(JSON.stringify({id}));// 接收参数
const ws = new WebSocket('ws://example.com');
ws.onmessage = event => {const {id} = JSON.parse(event.data);
};

 10、Fetch API:通过 Fetch API 发送 HTTP 请求,并通过请求的 body 传递数据。可以使用fetch()方法来发送请求,并通过body参数传递数据。

// 发送参数
const params = {id: 123, name: 'Alice'};
fetch('http://example.com/page', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify(params)
});// 接收参数
const body = await fetch('http://example.com/page').then(res => res.json());
const {id, name} = body;

 11、AJAX:通过 XMLHttpRequest 对象发送异步 HTTP 请求,通过请求的参数传递数据。可以通过XMLHttpRequest.send()方法发送请求,通过XMLHttpRequest.onreadystatechange事件监听请求的状态变化。

// 发送参数
const xhr = new XMLHttpRequest();
xhr.open('POST', 'http://example.com/page');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function() {if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {console.log(xhr.responseText);}
};
const params = {id: 123, name: 'Alice'};
xhr.send(JSON.stringify(params));// 接收参数
const xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/page');
xhr.onreadystatechange = function() {if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {const {id, name} = JSON.parse(xhr.responseText);}
};
xhr.send();

 

相关文章:

Web 页面之间传递参数的几种方法

Web 页面之间传递参数的方法有很多种&#xff0c;下面列出一些常见的方法以及它们的代码示例。 一、前端直接传递参数 1、URL 参数传递&#xff08;query string&#xff09;&#xff1a;通过 URL 的查询字符串&#xff08;即问号后面的参数&#xff09;将参数传递给页面。可…...

Android实例仿真之二

目录 三 从无入手 第一阶段 第二阶段 第三阶段 第四阶段 第五阶段 第六阶段 第七阶段 八 举两个典型例子&#xff1a; 九 逆向工程 三 从无入手 这节标题叫从无入手&#xff0c;什么意思呢&#xff1f;如果没有Android这个实例存在&#xff0c;你要做一个类似Android…...

day47【代码随想录】动态规划之买卖股票的最佳时机III、买卖股票的最佳时机IV、最佳买卖股票时机含冷冻期、买卖股票的最佳时机含手续费

文章目录前言一、买卖股票的最佳时机III&#xff08;力扣123&#xff09;二、买卖股票的最佳时机IV&#xff08;力扣188&#xff09;三、最佳买卖股票时机含冷冻期&#xff08;力扣309&#xff09;四、买卖股票的最佳时机含手续费&#xff08;力扣714&#xff09;股票买卖问题总…...

网络数据包接收流程

1. 网络数据包接收流程简述 典型的以太网卡网络包接收流程如下&#xff1a; 1.网络包通过物理介质传到接收端的phy芯片&#xff1b; 2.phy芯片通过RGMII协议传到MAC芯片rx queue fifo中&#xff1b; 3.MAC芯片通过专用DMA将网络包搬运到网卡驱动程序预先分配好的rx ringbuffer中…...

CSAPP学习笔记——虚拟内存(二)

案例研究 Intel Core i7 该处理底层的Haswell微体系结构允许64位的虚拟和物理地址空间&#xff0c;而现在的Core i7实现支持48位&#xff08;256TB&#xff09;虚拟地址空间和52位&#xff08;4PB&#xff09;物理地址空间&#xff0c;这对目前来说已经完全够用了。&#xff…...

面试sql

创建表 create table Student ( Sno varchar(20) primary key,Sname varchar(20) UNIQUE,Ssex varchar(2),Sbirthday date,class varchar(20) )create table Course ( Cno varchar(20) primary key,Cname varchar(20) UNIQUE,Tno varchar(20) )create table Score ( …...

Python编程自动化办公案例(2)

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.前期代码 二.实现批量读取 1.os库 2.实现思路 &#xff08;1&#…...

Vulnhub 渗透练习(七)—— FRISTILEAKS: 1.3

环境搭建 下载链接 virtualbox 打开靶机设置为 host-only&#xff0c;攻击机同样。 具体可点此处 信息收集 开了个 80 端口。 用的是 apache 2.2.15 &#xff0c;这个版本有个解析漏洞。 目录 根据首页的图片猜测 /fristi/ 目录&#xff08;不过我没想到 -_-&#x…...

阶段二10_面向对象高级_分类分包思想和案例环境搭建

一.分类思想 1.分类思想概念&#xff1a; 分工协作&#xff0c;专人干专事 2.信息管理系统分类[案例] Student 类-------------------->标准学生类&#xff0c;封装键盘录入的学生信息&#xff08;id , name , age , birthday&#xff09; StudentDao 类-----------------&…...

关于打印工具print-js的使用

https://www.jianshu.com/p/f6f09dd9f7db第一步 安装组件//安装print-js npm install print-js --save //删除print-js npm uninstall print-js //安装固定版本 npm install print-js版本号 --save // 全局安装 npm install print-js --save -g第二步 引入组件安装成功后&#…...

Doxygen使用

文章目录简介Doxygen的安装Doxygen的配置生成配置文件常用配置Doxygen注释头文件注释:函数的注释:Doxygen文档生成reference简介 Doxygen 是一个流行的用于生产代码文档的工具&#xff0c;关于它的介绍可以参考官网&#xff1a;https://www.doxygen.nl/index.html。 我使用Dox…...

MySQL数据库调优————表结构设计优化

三范式 第一范式 字段具有原子性&#xff0c;即数据库表的每一个字段都是不可分割的原子数据项&#xff0c;不能是集合、数组、记录等非原子数据项当实体中的每个属性有多个值时&#xff0c;必须拆分为不同的属性 第二范式 满足第一范式的基础上&#xff0c;要求每一行数据…...

set对象和map对象

1 Set对象 介绍: Set数据结构类似数组&#xff0c;但所有成员的值唯一。 Set本身为一个构造函数&#xff0c;用来生成 Set数据结构&#xff0c;使用 add方法来添加新成员。 let a new Set(); [1,2,2,1,3,4,5,4,5].forEach(x>a.add(x)); for(let k of a){ console.log(k…...

stream()流的使用

文章目录引入流流的操作中间操作终端操作流的使用谓词筛选筛选各异的元素流的切片截断流跳过元素映射流的扁平化查找和匹配归约元素求和、最大值和最小值数值流构建流由值构建流由数组创建流引入流 java api提供的一种利用声明式的方式处理数据集合的一个东西&#xff0c;可以…...

C++学习笔记-常量

在程序执行过程中&#xff0c;其值不能改变的量称为常量(Constant)。普通常量的类型是根据数据的书写形式来决定的。如 100 是整型常量&#xff0c;0.5 是实型常量&#xff0c;‘q’ 是字符型常量&#xff0c;“qianfeng” 是字符串常量。 常量是固定值&#xff0c;在程序执行期…...

JavaScript系列之实现继承的几种方式

文章の目录一、借助父构造函数继承属性1、实现方式2、优点3、缺点二、原型链继承1、实现方式2、优点3、缺点三、组合继承四、ES6继承的实现方式参考写在最后一、借助父构造函数继承属性 1、实现方式 先定义一个父构造函数(this指向为window)&#xff1b;再定义一个子构造函数…...

java面试准备

1.自我介绍: 2.基础 : 1.集合 : java容器中分为collection 和map两大类 collection 分为list集合(有序且重复的),set集合(无序,不可重复) list集合分为arrayList集合 : 查询快,增删慢,它是基于数组结构的,对数据的增删是在数组的尾部进行添加或删除的,其效率相对于LinkedList…...

kafka-6-python单线程操作kafka

使用Python操作Kafka&#xff1a;KafkaProducer、KafkaConsumer Python kafka-python API的帮助文档 1 kafka tools连接 (1)/usr/local/kafka_2.13-3.4.0/config/server.properties listeners PLAINTEXT://myubuntu:9092 advertised.listenersPLAINTEXT://192.168.1.8:2909…...

【Spring教程】1.Spring概述

1、概述 1.1、Spring是什么&#xff1f; Spring 是一款主流的 Java EE 轻量级开源框架 &#xff0c;Spring 由“Spring 之父”Rod Johnson 提出并创立&#xff0c;其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发。从简单性、可测…...

设计模式-代理模式

控制和管理访问 玩过扮白脸&#xff0c;扮黑脸的游戏吗&#xff1f;你是一个白脸&#xff0c;提供很好且很友善的服务&#xff0c;但是你不希望每个人都叫你做事&#xff0c;所以找了黑脸控制对你的访问。这就是代理要做的&#xff1a;控制和管理对象。 监视器编码 需求&…...

2010-2024年省级农村居⺠消费价格指数

本数据为国家统计局编制的官方统计数据&#xff0c;具体编制方法参考国家统计局CPI调查方案及《中国统计年鉴》。农村居民消费价格指数&#xff08;Consumer Price Index for Rural Residents&#xff0c;简称农村CPI&#xff09;是综合反映农村居民家庭所购买的生活消费品价格…...

基于React与OpenAI构建智能聊天应用:架构设计与工程实践

1. 项目概述&#xff1a;一个开箱即用的React聊天应用框架最近在做一个需要集成智能对话功能的小项目&#xff0c;不想从零开始造轮子&#xff0c;就在GitHub上翻找现成的解决方案。结果就发现了这个叫openai-react-chat的仓库。第一眼看到这个标题&#xff0c;我的直觉是&…...

基于MCP协议构建AI驱动的网络安全情报聚合与自动化分析平台

1. 项目概述&#xff1a;一个为AI工作流赋能的网络安全情报中枢 如果你是一名安全工程师、渗透测试人员&#xff0c;或者正在构建一个需要实时威胁情报的AI智能体&#xff0c;那么你肯定对这样的场景不陌生&#xff1a;为了评估一个供应商的风险&#xff0c;你需要在浏览器里同…...

构建数字情绪护盾:基于情感分析与规则引擎的个性化内容过滤系统

1. 项目概述&#xff1a;构建你的数字情绪护盾在数字生活的洪流中&#xff0c;我们每天都被海量的信息、社交互动和网络噪音所包围。你有没有过这样的感觉&#xff1a;刷了半小时手机&#xff0c;不仅没放松&#xff0c;反而感到莫名的焦虑和疲惫&#xff1f;或者&#xff0c;在…...

运行软件时提示找不到VCRUNTIME140_1.dll

运行软件时提示找不到VCRUNTIME140_1.dll前言解决办法说明参考前言 我们将cpp程序打包之后,放到别的电脑上,新电脑可能会提示: 运行软件时提示找不到VCRUNTIME140_1.dll 解决办法 根据电脑的型号,选择性的安装64位和32位的,如果你不懂电脑,那两个全都安装即可. https://aka.…...

对比直接采购与使用Token Plan套餐在长期项目中的成本观感

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接采购与使用Token Plan套餐在长期项目中的成本观感 在持续需要大模型API的中长期项目中&#xff0c;成本的可预测性和可控性…...

Logo设计全流程指南:从品牌定位到视觉落地的核心逻辑

初创企业团队常面临标志图形难以传递核心业务的现实困境。脱离市场认知的视觉符号会导致后续传播成本成倍增加。本文系统拆解标志构建的标准作业路径&#xff0c;提供可量化验证的参数指标与执行清单。读者可依据本框架完成从抽象概念到商用矢量文件的完整转化。有效规避重复试…...

5个步骤掌握RISC-V模拟器:Ripes让计算机硬件学习变得如此简单

5个步骤掌握RISC-V模拟器&#xff1a;Ripes让计算机硬件学习变得如此简单 【免费下载链接】Ripes A graphical processor simulator and assembly editor for the RISC-V ISA 项目地址: https://gitcode.com/gh_mirrors/ri/Ripes 想要了解计算机处理器如何工作却不知从何…...

BlocPad CLI:为AI编程助手提供结构化上下文的工程实践

1. 项目概述&#xff1a;BlocPad CLI&#xff0c;一个为工程智能体设计的上下文驱动工具如果你和我一样&#xff0c;日常开发中深度依赖像 Cursor、Claude Code 或 GitHub Copilot 这类 AI 编程助手&#xff0c;那你肯定也遇到过这样的困境&#xff1a;如何让 AI 助手清晰地理解…...

别再一张张手动改了!用Python脚本批量解密微信PC版dat图片(附完整代码)

用Python自动化解密微信PC版dat图片的完整指南 微信PC版默认会将接收的图片保存为加密的dat文件格式&#xff0c;这些文件无法直接查看或使用。传统方法需要手动一张张转换&#xff0c;效率极低。本文将详细介绍如何用Python编写脚本&#xff0c;实现dat图片的批量自动解密&am…...