利用JavaScript操作Cookie实现动态参数与年度切换持久化
本文分享如何利用JavaScript操作Cookie解决前端动态参数拼接与页面状态持久化问题。通过解析后台配置的复杂字符串,动态替换用户名与年度参数,并结合Cookie技术实现年度切换后的数据保存。即使刷新页面或重新登录,也能保持用户选择的年度设置,避免重置为默认值,提升用户体验。
利用JavaScript操作Cookie实现动态参数与年度切换持久化
为了清晰阐述这一技术方案,我们需要从基础背景开始梳理。
首先,后台配置了一个名为keywords的参数,其具体值为efmis://|efmfj|username|2200|0||2014|http://10.20.1.54:7001/cssServerportal222012/|||||02。尽管该字符串的具体含义暂且不论,但类似这种复杂的配置字符串在前端开发中十分常见。后台配置完成后,前台通过${tag_bean.keywords}进行展示。无论后台如何配置,前台都会原样输出该字符串。这里出现第一个问题:username位置需要嵌入当前登录用户的动态用户名,而非静态文本。如果直接写成efmis://|efmfj|${username}|2200|0||2014|http://10.20.1.54:7001/cssServerportal222012,EL表达式并不会被翻译为动态代码,而是作为字符串原样显示。显然,直接使用EL嵌套不可行,必须通过JS对该字符串进行处理。
该字符串最终将作为JavaScript方法的参数传入,例如以下场景:
代码如下:
<li [#if c.keywords?exists] keywords="${c.keywords}"
[/#if] path="${c.path}" onclick="clickClient(this.path,this.keywords);">
<a href="javascript:void(0)" style="cursor: pointer;"><span>${c.name}</span>
</a>
</li> 这里的clickClient并非最终执行逻辑的方法,而是一个过渡性的处理函数。
代码如下:
clickClient = function(path,keywords){
//解析分解keywords开始
keywords = keywords.replace("username","${user.username}");
var suffIndex=keywords.indexOf("http");
var prefix = keywords.substr(0,suffIndex-1);
var suffix = keywords.substr(suffIndex-1);
var preIndex=prefix.lastIndexOf("|")+1;
var year = prefix.substr(preIndex);
prefix = prefix.substr(0,preIndex);
//解析分解keywords结束
//合并url
keywords = prefix+$("#year").val()+suffix;
clientInvoke(path,keywords);
} 动态参数解析与拼接逻辑
该方法的核心目的是调用clientInvoke,并传入经过处理的keywords参数。首先,通过replace将字符串中的username替换为${user.username},从而在JS层面动态解析出当前用户名。若年度2014也需要动态切换,则需将该字符串拆解为三部分:
前缀:efmis://|efmfj|username|2200|0||
年度:2014
后缀:|http://10.20.1.54:7001/cssServerportal222012/|||||02
将年度数据放入select下拉菜单中。当触发clickClient方法时,即时从当前选中的option中获取年度值,再与前缀和后缀拼接,从而实现年度灵活切换的功能。
代码如下:
年度切换
<select id="year" onclick="switchYear(this.value);">
<option value="2012">2012</option>
<option value="2013">2013</option>
<option value="2014" selected="selected">2014</option>
<option value="2015">2015</option>
</select> 基于Cookie的年度状态持久化方案
此时面临一个新问题:当年度从默认的2014切换到2013后,若刷新页面,年度会重新变回默认的2014。由于刷新页面会导致所有变量重新加载,设置全局变量已无法解决问题。那么,是否存在一种不随页面刷新而丢失且易于操作的数据存储方式?正如标题所示,答案便是Cookie。
Cookie作为本地存储资源,支持随存随取,在“记住密码”等功能中应用广泛。此处我们利用Cookie保存年度数据。每次页面加载时,判断Cookie是否存在:若存在,则从中取出年度值并填入select;若不存在,则从select中获取当前值并存入Cookie。
代码如下:
$(document).ready(function(){
if(getCookie("Year")==null){//不存在该cookie,放进去
setCookie("Year",$("#year").val());
}else{
//已经存在该cookie,则从中取出
$("#year").val(getCookie("Year"));
}
});
//设置cookie
function setCookie(name,value)
{
//var Days = 30;
//var exp = new Date();
//exp.setTime(exp.getTime() + 365*24*60*60*1000);
document.cookie = name + "="+ escape (value);
// + ";expires=" + exp.toGMTString();
}
//读取cookies
function getCookie(name)
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg)) return unescape(arr[2]);
else return null;
} 在切换年度时,Cookie的值也需同步更新:
代码如下:
switchYear=function(year){
setCookie("Year",year);
} 根据业务要求,必须确保2014作为默认年度。每次切换并完成Cookie操作后,若关闭浏览器重新登录进入首页,年度应恢复为2014,而非上次切换的值。因此,无需设定Cookie的过期时间,只需让其随浏览器关闭自动清除即可。
当然,若期望浏览器长期记住Cookie状态,可设定过期时间。setCookie函数中的注释代码正是用于设置过期时间的示例,感兴趣者可进一步研究。
D3.js 比例尺与坐标轴的配置详解
2026-11-05 16:54:46
JavaScript怎么遍历对象的Symbol键和不可枚举属性
2026-11-05 13:13:39
封装一个健壮的JS字符串判空工具函数
2026-11-05 12:16:14
JavaScript合并数组的三种常用方法:concat、扩展运算符与push
2026-11-05 11:22:29
JavaScript立即执行函数(IIFE)是什么及基本语法
2026-11-05 10:51:19
