3

嗨,我有一张大表要管理的项目。当我单击按钮时,我使用

$.post("update_the_database.php", { mode: 'themode', username: username },
            function(result){
                window.location.href = window.location.href;
        });

"update_the_database.php"在后台运行,然后在完成后重新加载页面。它会回到页面顶部...

我试过了:

window.location.href = window.location.href + '#the_id';

但在所有浏览器(IE、Firefox、Chrome、Safari)中,它会更改地址栏中的 URL,但不会重新加载页面。

从这里:

window.location.href=window.location.href 和 window.location.reload() 的区别

“window.location.href=window.location.href 如果 URL 中有一个锚点 (#),则不会重新加载页面 - 在这种情况下,您必须使用 window.location.reload()。”

所以我尝试了:

window.location.reload(true);

它会重新加载页面并向下滚动到 Chrome 和 Safari 中的上一个位置,而不是 IE 和 Firefox...

如果 url 中的所有更改都是哈希,如何强制页面重新加载?

方法#2:

window.location.hash = "#" + newhash;
window.location.reload(true);

现在它可以在 Firefox 中运行...

顺便说一句,如果我使用 window.location.reload(true); 在 IE 中它出现:

Windows Internet Explorer

To display the webpage again, the web browser needs to
resend the information you've previously submitted.

If you were making a purchase, you should click Cancel to
avoid a duplicate transaction. Otherwise, click Retry to display
the webpage again.

Retry   Cancel   

您必须按“重试”,否则会出现错误页面,显示“网页已过期”。

为了避免我目前正在做的 IE 弹出窗口:

                window.location.hash = "#<?php echo $id;?>";
                if (navigator.appName != 'Microsoft Internet Explorer') {
                    window.location.reload(true);
                }

虽然它只是将哈希放入地址栏中,即使我转到地址栏并按 Enter 也不会刷新页面。我必须删除哈希并按 Enter 重新加载页面...(然后滚动到顶部)

4

3 回答 3

1

而不是每次都使用 window.location.href 附加“#id”,这会在您的情况下导致问题,因为编码时间 window.location.href 已经包含一个 id 并且您将另一个 id 附加到它。在 window.location.href 上使用正则表达式 '/^(.*)#/is' 在重新加载之前找到实际的 url。现在使用你写的逻辑,即

$.post("update_the_database.php", { mode: 'themode', username: username },
        function(result){
            var str = window.location.href;
            var patt1 = /^(.*)#/;
            window.location.href = patt1.exec(str)[1];
            window.location.href = window.location.href + '#the_id'
        }
}
于 2013-02-12T05:03:24.447 回答
1

我能想到的唯一技巧是保存由指示的滚动位置window.scrollY并将其传递给下一个请求(例如:使用查询字符串)。然后你创建一个代码来检查这个键是否存在,使用 . 跳转到那个位置window.scrollTo(0, lastPos)。如果您不使用任何 javascript 框架,它并不漂亮并且需要大量代码(并且会弄脏您的查询字符串)。

如果您这样做是为了定期更新数据,也许值得重新设计您的代码以进行 ajax 更新。

于 2014-11-07T01:23:53.093 回答
1

对正则表达式的例子来说,你知道当你用正则表达式解决问题时他们会说什么!

    if(window.location.hash){
window.location.href = window.location.href.replace(window.location.hash,"#mynewhash");}

window.location.hash 将包含

URL 中 # 符号之后的部分,包括 # 符号。您可以侦听 hashchange 事件以获取支持浏览器中哈希更改的通知。

请参阅Mozilla 文档

于 2013-02-12T05:14:53.590 回答