首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在POST后重新加载浏览器窗口,而不提示用户重新发送POST数据

在POST后重新加载浏览器窗口,而不提示用户重新发送POST数据
EN

Stack Overflow用户
提问于 2011-02-02 08:54:43
回答 12查看 116.6K关注 0票数 62

当用户访问我的网站时,每个页面上都有一个“登录”链接。单击此选项将使用一些JavaScript来显示一个覆盖窗口,其中提示用户输入其凭据。输入这些凭据后,将对web服务器进行Ajax调用以验证它们;如果它们有效,则返回身份验证票证cookie并重新加载页面,以便显示页面上特定于经过身份验证的用户或(现在)当前登录用户的任何内容。

我正在通过脚本完成页面重新加载,使用:

代码语言:javascript
复制
window.location.reload();

这对于通过GET请求加载的页面(绝大多数)非常有效,但有些页面使用回发表单。因此,如果用户转到其中一个页面,执行回发,然后选择登录,则当window.location.reload()脚本运行时,会出现一个对话框,提示用户是否要重新提交帖子正文。

我想,为了解决这个问题,我可以告诉浏览器重新加载页面,所以我尝试了:

代码语言:javascript
复制
window.location.href = window.location.href;

但浏览器不会对上面的语句采取任何操作,我猜是因为它认为新的URL与旧的URL是相同的。如果我将上面的内容更改为:

代码语言:javascript
复制
window.location.href = window.location.pathname;

它会重新加载页面,但我丢失了所有的查询字符串参数。

我目前的解决方法已经足够了,但还不够好--简而言之,我将一个querystring参数添加到当前的window.location.href值中,然后通过调用reloadPage("justLoggedIn")将该参数分配回window.location.href,其中reloadPage函数是:

代码语言:javascript
复制
function reloadPage(querystringTackon) {
    var currentUrl = window.location.href;

    if (querystringTackon != null && querystringTackon.length > 0 && currentUrl.indexOf(querystringTackon) < 0) {
        if (currentUrl.indexOf("?") < 0)
            currentUrl += "?" + querystringTackon;
        else
            currentUrl += "&" + querystringTackon;
    }

    window.location.href = currentUrl;
}

这是可行的,但它会导致URL为www.example.com/SomeFolder/SomePage.aspx?justLoggedIn,这看起来很俗气。

在JavaScript中,有没有一种方法可以让它执行get重载,而不提示用户重新提交POST数据?我需要确保任何现有的查询字符串参数都不会丢失。

EN

回答 12

Stack Overflow用户

发布于 2011-05-21 05:35:56

代码语言:javascript
复制
window.location.href = window.location.href;

不要问我为什么它works..but它做:)。

我想就像js引擎解释逻辑一样。

票数 50
EN

Stack Overflow用户

发布于 2011-11-01 03:11:30

这也行得通:

代码语言:javascript
复制
window.location.href = window.location.pathname + window.location.search
票数 7
EN

Stack Overflow用户

发布于 2013-04-16 21:21:19

使用

代码语言:javascript
复制
RefreshForm.submit(); 

而不是

代码语言:javascript
复制
document.location.reload(true); 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4869721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档