我在文档中获取了查询字符串。准备好,但后来我想删除它并在不刷新页面的情况下将值保存在全局变量中,但它永远不会发生..
var globalVar = null;
$(document).ready(function () {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
results == null ? null : decodeURIComponent(results[1].replace(/\+/g, " "));
if (results != null)
globalVar = results[1];
window.location.search = '';
});
此代码不断重新加载页面
修改
以下是发生的事情,
用户收到电子邮件到链接,在网站上的表格中选择右侧行,我们使用查询字符串,因为使用哈希不起作用(TMG服务器将其删除),所以一旦用户进入网站,我们就不会因为我们正在使用哈希,所以需要查询字符串(因为哈希不会在更改时刷新页面。)
修改2
为什么不想保留查询字符串和哈希?
因为我可以更新哈希而不刷新,而更新查询字符串刷新页面:(,所以我不希望它像
www.example.com/sites/fruitstore?fruitid=123#fruitid=432
答案 0 :(得分:4)
您需要使用历史记录api,而不是仅仅将位置设置为新的。
https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history
pushstate
或replaceState
将允许您更改浏览器中显示的网址而不刷新页面。
答案 1 :(得分:0)
答案 2 :(得分:0)
答案 3 :(得分:0)
使用history API:
window.history.replaceState({}, document.title,
window.location.href.split('?')[0]);
replaceState
将使用给定值替换当前历史记录条目。第一个参数是数据参数,在此示例中未使用。第二个参数是窗口标题。最后一个参数是新URL。 split
在查询参数开始之前获取所有内容。如果您需要遵循#
的内容,则必须使用更复杂的网址重建功能。
replaceState
不会向历史记录添加新条目,这会阻止您使用无用的值填充历史记录。
有关详细信息,请参阅this answer。
答案 4 :(得分:0)
是的,很明显。相反,使用window.location.search = '';
此代码不断重新加载页面
if (location.search != '')
location.search = '';
一旦用户访问该网站,我们就不再需要查询字符串了,因为我们正在使用哈希(因为哈希不会在更改时刷新页面。)
您也可以尝试使用history API,以便在位置栏中始终拥有可复制和可接受的查询字符串URL。