You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两个window.location.href设置后参数丢失问题咨询

解决URL查询参数被覆盖的问题

嘿,我完全懂你遇到的困扰——每次调用其中一个选择函数时,之前的URL参数都会被冲掉,没法同时保留projektnamn和paket两个参数对吧?这是因为你直接给window.location.href赋值新的查询字符串时,会完全替换掉原来的,而不是追加参数。另外还要纠正个小细节:你期望的URL格式里用了两个?,这其实不符合规范,正确的多参数URL应该用&分隔,比如domain.com?projektnamn=Something&paket=Something,这样PHP的$_GET才能正确解析到两个字段。

下面给你两种解决方案,优先推荐第一种现代浏览器兼容的简洁写法:


方案1:使用URLSearchParams API(推荐)

现代浏览器都支持这个API,它能帮你轻松管理URL查询参数,不用手动拼接字符串,还自动处理编码问题:

修改后的jsFunction函数:

function jsFunction(){
  // 获取当前URL的查询参数集合
  const params = new URLSearchParams(window.location.search);
  // 获取选中的项目名称值
  const myselect = document.getElementById("projektnamn");
  const projektnamnValue = myselect.options[myselect.selectedIndex].value;
  // 更新或添加projektnamn参数
  params.set('projektnamn', projektnamnValue);
  // 重新构建完整URL并跳转
  window.location.href = `${window.location.pathname}?${params.toString()}`;
}

修改后的services函数:

function services(){
  const params = new URLSearchParams(window.location.search);
  const select = document.getElementById("paket");
  const paketValue = select.options[select.selectedIndex].value;
  // 更新或添加paket参数
  params.set('paket', paketValue);
  window.location.href = `${window.location.pathname}?${params.toString()}`;
}

方案2:手动解析查询参数(兼容旧浏览器如IE)

如果需要兼容不支持URLSearchParams的旧浏览器,可以用这个手动处理的方法:

先写一个辅助函数来获取当前查询参数:

function getCurrentQueryParams() {
  const params = {};
  // 去掉URL开头的?,分割成参数对
  const searchParts = window.location.search.slice(1).split('&');
  
  searchParts.forEach(part => {
    if (!part) return;
    const [key, value] = part.split('=');
    // 解码参数值,避免乱码
    params[key] = decodeURIComponent(value);
  });
  
  return params;
}

然后修改你的两个函数:

function jsFunction(){
  const params = getCurrentQueryParams();
  const myselect = document.getElementById("projektnamn");
  // 更新projektnamn参数
  params.projektnamn = myselect.options[myselect.selectedIndex].value;
  
  // 重新拼接查询字符串
  const newQuery = Object.keys(params)
    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
    .join('&');
  
  window.location.href = `${window.location.pathname}?${newQuery}`;
}

function services(){
  const params = getCurrentQueryParams();
  const select = document.getElementById("paket");
  params.paket = select.options[select.selectedIndex].value;
  
  const newQuery = Object.keys(params)
    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
    .join('&');
  
  window.location.href = `${window.location.pathname}?${newQuery}`;
}

这样修改后,不管你先选项目名称还是套餐,两个参数都会被保留在URL里,PHP后端也能正常通过$_GET['projektnamn']和$_GET['paket']获取到值并存入数据库啦。

内容的提问来源于stack exchange,提问作者Hallberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 23:19:06