通过JavaScript重新加载页面:避免“Postback”警告

6

我正在通过JavaScript触发页面重新加载,使用以下代码:

window.location.reload(true);

然而,在某些情况下(之前的postback),浏览器会给出以下警告:“要重新显示网页,Web浏览器需要重新发送您先前提交的信息...”。

有没有办法避免这个消息,直接进行postback,因为这可能会让用户感到困惑?如果我需要通过其他方式重新加载页面,那就这样吧。


最终,我通过不进行postback而是通过客户端重定向,并使用Jquery查询插件将必要的参数添加到查询字符串中来解决了这个问题。 - Sam
6个回答

10

如果您想刷新页面而不包括POST数据,而不仅仅是后退,请尝试

window.location = window.location.href;

2

唯一的方法是阻止其重新POST参数。使用window.location = window.location


然而,当转换为“GET”时,这将丢失“POST”数据(我相信)。 - jensgram

2
您正在尝试重新执行的请求是一个POST请求,因此会出现警告。您可以确保只重新加载通过GET请求获取的资源,或者 - 或者通过POST方法提交隐藏的<form>(从而模拟重新加载,保证不被缓存)。
正如您可能已经知道的那样,警告与HTTP动词中的idempotence(无副作用)有关。 GET(以及其他一些)应该被认为是幂等的,而POST请求允许对服务器进行更改。因此,客户端应提示用户确认是否再次执行操作。

2

我认为在重新加载时,没有办法进行postback而不带消息。

顺便问一下,重新加载是为了什么?如果是为了再次提交POST信息,我建议您通过ajax或使用javascript进行隐藏表单提交手动提交数据。


刷新是为了展示更新的数据,并且保留状态数据(例如用户在页面上设置了筛选器,我希望在刷新时保持该筛选器处于激活状态)。 - Sam
所以,如果您不想再次将POST数据发送到服务器(这是我从您上面的回复中理解到的),则在服务器端脚本处理完POST数据后进行303/302重定向到视图页面。如果您这样做,就可以像以前一样执行JavaScript重新加载操作而不会出现任何问题。请参阅此处以了解重定向后POST解决方案的说明。http://www.ajaxray.com/blog/2008/01/12/how-to-avoid-postdata-resend-warning/ - mays
谢谢您的评论,我猜想有条件地进行302重定向的唯一方法是通过服务器端实现,或者是否有通过JavaScript实现的方法? - Sam
1
从逻辑上讲,它在服务器端处理更好,最好使用303而不是302。 - mays

0

之后:

mysql_query("insert into table (id_item, quantity, cost) values($m, '$amount', '$cost')");

放置:

header("Location: index.php");

然后使用jQuery重新加载页面,您就不会收到“...网络浏览器需要重新发送信息...”的警告。


0
在页面中保留状态数据的一种方法是使用 URL 上的片段标识符,例如 #filter1、#filter2,然后使用 jQuery 的便捷 hashchange 插件执行代码(即,在 URL 片段通过 onhashchange 事件更改时重新加载页面的相关部分以获取新结果)。这也很好,因为不同的状态可以被加为书签并缓存。

http://benalman.com/projects/jquery-hashchange-plugin/


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