好的,我现在得到了我的查询字符串如何删除它而不刷新页面

时间:2014-02-27 16:19:14

标签: javascript jquery

我在文档中获取了查询字符串。准备好,但后来我想删除它并在不刷新页面的情况下将值保存在全局变量中,但它永远不会发生..

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

5 个答案:

答案 0 :(得分:4)

您需要使用历史记录api,而不是仅仅将位置设置为新的。

https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history

pushstatereplaceState将允许您更改浏览器中显示的网址而不刷新页面。

此脚本也可以帮助您:https://github.com/browserstate/history.js/

答案 1 :(得分:0)

我认为你的“重装”问题来自这一行:

window.location.search = ''

This SO answer将为您提供处理浏览器URL历史记录的好方法:

答案 2 :(得分:0)

你需要现代浏览器的历史API,具体来说,pushState会做到这一点。

reference

你可能想要使用一个库,如f.e. history.js,因为处理不同的浏览器可能非常棘手......

答案 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。