在页面刷新之前从URL中删除查询字符串

时间:2011-03-19 02:14:21

标签: javascript jquery caching cookies url-rewriting

新用户注册后,我需要将用户重定向到主页并显示Twitter样式的欢迎消息。我最初尝试使用jquery cookie插件来存储我的消息,如果cookie存在则将其显示在重定向页面上,但问题是它并不适用于所有浏览器。 Safari上的Firfox不会删除cookie,因此每次刷新浏览器时都会显示该消息。这是代码:

if ($.cookie("message")) {
    TwentyQuestions.Common.ShowMessageBar($.cookie("message"), 7000);
    $.cookie('message', "any_value", { expires: -10 })
}

所以我决定使用查询字符串,但现在问题类似了。加载主页时,检测到查询字符串并显示消息。但是如何从URL中删除查询字符串,以便每次刷新页面时都不显示该消息?

谢谢!

5 个答案:

答案 0 :(得分:5)

你能做到:

window.location.href = window.location.href.split('?')[0];

它有效,但我不确定这是否是您要找的?

答案 1 :(得分:1)

您可以使用hash。而不是使用查询字符串。

使用特殊哈希重定向到主页,输入时只需将其删除即可。

类似的东西:

if(document.location.hash == '<special hash>') {
    TwentyQuestions.Common.ShowMessageBar(...);
    document.location.hash='';
}

答案 2 :(得分:1)

也许问题是你试图在客户端做所有事情。相反,您应该设置与用户关联的持久性cookie。然后在后端,第一次向该用户显示主页,显示欢迎消息。同时清除服务器端此用户的“第一次用户”标志。然后,当用户下次访问此页面时,他们将看不到该消息。

您也可以这样做,如果用户访问您的网站并且cookie不存在,您可以显示“欢迎第一次用户”消息。

答案 3 :(得分:0)

location = location.pathname + location.hash

这当然会丢失任何POST数据,但是如果你有一个查询字符串,他们可能会通过GET到达你的网站。

如果该位置没有查询组件,它应该没有效果。

答案 4 :(得分:0)

您可以使用Cookie执行此操作,但必须正确删除Cookie。过去设置过期日期适用于某些浏览器而不是您发现的其他浏览器,使用jQuery cookie插件删除cookie的正确方法是发送null;来自fine manual

  

@example $ .cookie('the_cookie',null);
  @desc通过传递null作为值来删除cookie。请记住,您必须使用设置cookie时使用的相同路径和域。

所以删除它:

$.cookie('message', null);

并且cookie方法应该可以正常工作。