
在现代Web开发中,为了提高网站的可维护性和灵活性,我们经常从JSON文件或API动态加载数据来生成页面内容。例如,一个房地产网站可能会从JSON文件获取房源信息,并在主页上展示所有房源列表。当用户点击某个房源的“详情”按钮时,页面会跳转到一个详情页,并根据该房源的唯一标识符(ID)来加载和显示具体信息。
最初,开发者可能会选择使用localStorage来存储被点击房源的ID。当用户点击“详情”按钮时,J*aScript函数会将该房源ID保存到localStorage,然后跳转到详情页。详情页加载时,会从localStorage中读取ID,再根据此ID从JSON数据中匹配并渲染相应内容。
以下是这种基于localStorage方法的示例代码:
主页生成列表项的函数 (addElement):
function addElement(appendIn, value) {
let div = document.createElement('div');
div.className = "box";
let {
num, // 房源ID
fokep,
utcanev,
kerulet,
ar,
kepekszama,
ingtipus,
ingallapot,
negyzetmeter
} = value;
div.innerHTML = `
<div class="thumb">
<p class="total-images"><i class="far fa-image"></i><span>${kepekszama}</span></p>
<p class="type"><span>${ingtipus}</span><span>${ingallapot}</span></p>
@@##@@
</div>
<h3 class="name">${utcanev}</h3>
<p class="location"><i class="fas fa-map-marker-alt"></i><span class="category">${kerulet}</span> Kerület</p>
<div class="flex" style="justify-content:center; align-items:center">
<p><span class="price">${ar}</span><i> M Forint</i></p>
<p><i class="fas fa-maximize"></i><span>${negyzetmeter} m2</span></p>
</div>
<a href="property.html" class="btn num" target="_blank" rel="noopener noreferrer" style="text-align:center;" data-filter="${num}" onmousedown="detailsClick
(${num})">Részletek</a>
`;
appendIn.appendChild(div);
}
// 主页加载JSON并调用addElement
fetch('./database/houses.json')
.then(res => res.json())
.then(json => {
for (let value of json) {
addElement(grid, value);
}
});点击事件将ID存入 localStorage (detailsClick):
function detailsClick(num) {
localStorage.setItem("idIndex", num);
// detailsIdClicked = num; // 此行可能用于页面内直接操作,与分享无关
}详情页从 localStorage 读取ID并加载内容:
let num = localStorage.getItem("idIndex");
fetch('./database/houses.json')
.then(res => res.json())
.then(json => {
for(let value of json){
if (num == value.num){
addDetailedElement(grid, value);
addheadElement(head,value);
break; // 找到匹配项后即可退出循环
}
}
});这种方法的问题在于,localStorage是浏览器本地存储,数据仅限于当前用户的浏览器。如果用户将详情页的URL(例如 property.html)分享给其他人,其他人在打开这个链接时,其localStorage中并没有保存对应的房源ID,导致详情页无法正确显示内容。这使得动态生成的内容无法被独立地分享或收藏,极大地限制了用户体验和网站的功能性。
为了解决localStorage的局限性,并实现动态内容的可共享性,标准的Web开发实践是使用URL查询参数(Query Parameters)。查询参数允许我们将数据直接嵌入到URL中,例如 property.html?id=123。这样,无论链接在哪里被打开,ID信息都随URL一起传递,详情页可以从URL中提取ID并加载相应内容。
这种方法具有以下优势:
首先,我们需要修改主页中生成详情页链接的方式,将房源ID作为查询参数添加到href属性中。同时,由于ID已包含在URL中,onmousedown事件和detailsClick函数不再需要负责存储ID到localStorage。
UXbot
AI产品设计工具
185
查看详情
更新后的 addElement 函数:
function addElement(appendIn, value) {
let div = document.createElement('div');
div.className = "box";
let {
num, // 房源ID
fokep,
utcanev,
kerulet,
ar,
kepekszama,
ingtipus,
ingallapot,
negyzetmeter
} = value;
div.innerHTML = `
<div class="thumb">
<p class="total-images"><i class="far fa-image"></i><span>${kepekszama}</span></p>
<p class="type"><span>${ingtipus}</span><span>${ingallapot}</span></p>
@@##@@
</div>
<h3 class="name">${utcanev}</h3>
<p class="location"><i class="fas fa-map-marker-alt"></i><span class="category">${kerulet}</span> Kerület</p>
<div class="flex" style="justify-content:center; align-items:center">
<p><span class="price">${ar}</span><i> M Forint</i></p>
<p><i class="fas fa-maximize"></i><span>${negyzetmeter} m2</span></p>
</div>
<!-- 关键修改:将ID添加到URL查询参数中 -->
<a href="property.html?id=${num}" class="btn num" target="_blank" rel="noopener noreferrer" style="text-align:center;" data-filter="${num}">Részletek</a>
`;
appendIn.appendChild(div);
}注意事项:
在 property.html 详情页加载时,我们需要从当前页面的URL中提取 id 参数的值。J*aScript提供了 URLSearchParams 接口,可以方便地处理URL的查询字符串。
详情页获取ID并加载内容的J*aScript:
// 获取当前页面的完整URL
const url = new URL(window.location.href);
// 创建URLSearchParams对象来解析查询字符串
const params = new URLSearchParams(url.search);
// 获取名为 'id' 的查询参数的值
const propertyId = params.get('id');
// 确保获取到了ID
if (propertyId) {
fetch('./database/houses.json')
.then(res => res.json())
.then(json => {
// 遍历JSON数据,查找匹配的房源
const foundProperty = json.find(value => value.num == propertyId);
if (foundProperty) {
addDetailedElement(grid, foundProperty);
addheadElement(head, foundProperty);
} else {
// 处理未找到房源的情况,例如显示错误信息或重定向
console.error(`未找到ID为 ${propertyId} 的房源。`);
// 可以添加代码来显示“未找到”页面或返回主页
}
})
.catch(error => {
console.error('加载房源数据失败:', error);
// 处理网络或JSON解析错误
});
} else {
// 处理URL中没有ID参数的情况,例如显示错误信息或重定向
console.error('URL中缺少房源ID参数。');
// 可以添加代码来显示“无效链接”页面或返回主页
}
// 假设 addDetailedElement 和 addheadElement 函数已定义
// function addDetailedElement(container, data) { /* ... */ }
// function addheadElement(container, data) { /* ... */ }代码解释:
通过将房源ID嵌入到URL查询参数中,我们成功地解决了动态生成内容详情页无法分享的问题。这种方法是Web开发中处理可共享动态内容的标准和推荐方式。
关键要点:
通过遵循这些原则,您可以构建出更健壮、用户友好且易于维护的动态Web应用程序。
以上就是构建可共享的动态内容:利用URL查询参数解决LocalStorage限制的详细内容,更多请关注其它相关文章!
相关文章:
整合Supabase认证与Django模型:跨模式迁移的解决方案
AO3访问入口汇总 AO3网页版同人作品一键直达
漫蛙官网正版漫画入口 漫蛙2官方网页登录地址
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
C#使用XPath查询节点时出错? 常见语法错误与调试技巧
12306几点到几点不能订票? | 官方最新系统维护时间全解析
2026春节假期时间安排 2026春节假日查询
在React函数组件中利用原生HTML5进行邮箱地址验证
深入理解J*a链表中的IPosition接口与使用
NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略
Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度
将HTML Canvas内容转换为可上传的图像文件(File对象)
css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容
ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接
菜鸟取件码是什么怎么查 最全查询渠道汇总
J*aScript中如何高效提取对象指定属性
移动端XML文件怎么转换成Excel 手机和平板上的解决方案
抖音网页版平台入口 抖音网页版官网在线访问教程
Golang如何使用context实现超时取消_Golang context超时取消模式实践
品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
将HTML动态表格多行数据保存到Google Sheet的教程
苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠
解决 Express.js 中 PUT 请求密码修改失败的路由配置指南
百度网盘网页版入口 百度网盘网页版官方登录网址
聚水潭ERP登录页面入口 聚水潭ERP官网登录界面
优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率
C++如何解决segmentation fault_C++段错误调试与原因分析
在WordPress中通过REST API获取BasicAuth保护的远程文章
现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践
解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException
lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法
AI泡沫首次被“刺破”:GPU十年都无法存活!
Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025
12306选座怎么选到商务座_12306商务座选择与配置说明
虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作
抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站
抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩
印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】
抖音网页版快捷访问 抖音网页版网页版入口操作教程
如何在PHP中实现基于MySQL的动态分页查询
Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接
Python中如何避免重复条件判断:利用数据结构实现动态逻辑
绝地鸭卫平a核爆刀流玩法攻略
Go RPC HTTP服务正确实现与常见陷阱解析
动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道
照顾宝贝2小游戏免费秒玩入口
微信语音通话掉线如何解决 微信语音通话稳定优化方法
Shopware订单对象中获取产品自定义字段的正确方法