使用windows.location.replace刷新页面,带有URL中的哈希标记无法正常工作。

5

我有一个AJAX调用,它负责一些服务器端设置(我在登录、语言切换等方面使用它)。只有在服务器端设置实际上因此调用而更改时,我才想要刷新当前页面(如果我们在POST后的页面上,不应重新提交POST表单数据)。在AJAX回调中简单的JS可以解决这个问题:

window.location.replace( window.location.toString() );

这个方法在没有锚点的情况下能够正常工作,但是当涉及到锚点时就会出现问题。假设我的URL是类似于http://www.mysite.com/index/list#someplace的形式,然后我执行了上述的ajax调用并以window.location.replace结束,那么页面将不会被重新加载。目前已经在FF3.6和IE7上测试过。

1个回答

7
你试过用这个吗:
window.location.hash = ''; //if you want to reload with an empty hash
window.location.reload(true); //reload the page and bypass the cache

我们使用单个网页作为我们的网络应用程序,一些功能(如货币、语言更改等)可能会触发重新加载。
如果您想防止某些重复提交,可以使用 cookie 来防止服务器执行重复工作。

我正在尝试做类似的事情。不是一个网页,而是我试图将我正在编写的应用程序压缩到几个页面中。它完全相同的东西(货币、语言、登录)将触发页面重新加载。然而,如果我销毁哈希值,我冒着用户最终看到完全不同的页面的风险,因为哈希值目前在布局中扮演着重要角色(jquery工具选项卡历史记录)。 - Peter
按下回车键太快了,我想要补充的是,我不知道如何使用cookie来防止重复提交和重复提交警报,但我会研究一下,感谢您的提示! - Peter
如果不使用 window.location.hash = '',则在重新加载页面时哈希键仍然存在。 - Mic
嗨Mic,抱歉回复慢了,一直在忙其他的事情。不过,如果我需要哈希保持不变怎么办?目前我通过使用jQuery UI选项卡和cookie历史记录来解决了这个问题,而不是基于哈希的历史记录。这根本不是一个解决方案,只是一个权宜之计。这个问题肯定会在项目后期再次出现。 - Peter
1
并且忘了提到,即使我遵循提议的代码,在URL中使用哈希标识符,它仍然不会重新加载。无论如何,感谢您的帮助! - Peter
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接