【问题标题】:"location.reload()" loses POST/SESSION data? (F5 / Ctrl+R keeps data?)“location.reload()”丢失 POST/SESSION 数据? (F5 / Ctrl+R 保留数据?)
【发布时间】:2012-06-07 08:06:45
【问题描述】:

我想创建一个按钮来重新加载页面而不会丢失$_POST 数据和$_SESSION
在网上,我找到了这段代码:

onclick="document.location.reload();"

这是我的按钮的代码:

<a class="button" href="" style="font-size: 0.7em; padding: 5px 10px;" onclick="document.location.reload();">Recharger la page</a>

但是当我点击按钮时,我会丢失$_POST 数据和$_SESSION

如果我尝试使用键盘命令 Ctrl+R (Chrome) 或 F5 (Firefox, IE9),浏览器会显示一个警报,通知我“我” m 再次尝试提交表单。如果我接受,它会起作用。

如何使用 JavaScript 命令重现这种浏览器刷新?还是我的按钮代码错了?

非常感谢您的帮助。

【问题讨论】:

    标签: javascript session browser-refresh


    【解决方案1】:

    只要您在发布到的同一位置,无论如何都会发生这种情况。但是,通常在 POST 请求后重定向以避免您正在尝试执行的操作。

    您的代码不起作用的原因是href="" 将导致对当前 URL 的 GET 请求。使用href="#" 防止它加载“新”页面或在onclick="..." 代码末尾添加return false;

    【讨论】:

    • 在按 F5 时,例如在 Firefox 中,它工作正常。我只是想找到一种使用 javascript 按钮的方法?
    • location.reload() 应该完成您在jsfiddle.net/ThiefMaster/thTyD 上看到的工作(请注意,您必须先单击“运行”,以便实际通过 POST 加载输出窗格)。
    • 但是我上面的代码不起作用... onclick="document.location.reload();"。是因为href=""吗?
    • 是的,您需要在点击结束时使用href="#"return false;
    • 完美!非常感谢!
    【解决方案2】:

    Ctrl + R 刷新页面清除您的缓存。我猜你正在使用 Internet Explorer?当您点击Ctrl + F5 时,其他一些浏览器的行为是这样的,但不是Ctrl + R

    来源:
    https://superuser.com/questions/205279/ctrlf5-vs-ctrlr-on-browsers
    Browser issue in Ctrl-R

    【讨论】:

    • 我通常在 FF 工作,但我正在从事一个需要跨浏览器的项目:)
    【解决方案3】:

    尝试使用

    location.reload(true);
    

    这将执行“硬”刷新,不仅重建 DOM,还从服务器重新检索任何资源。

    You can read more at the Mozilla Developer wiki.

    显然,location.reload() 相当于脚本中的F5,而Ctrl+F5 / Ctrl+R 可以使用location.reload(true) 模拟。

    另外,正如 ThiefMaster 所提到的,您在 onclick 语句的末尾缺少 ;return false,或者您应该将 href 设置为 javascript:void 0* 以防止浏览器从点击链接。

    *或任何其他返回 undefined

    的 JavaScript

    【讨论】:

    • 当我使用 location.reload(true) 时,浏览器会发出警报,通知我再次尝试提交表单。如果我接受,它就不起作用。是因为href=""吗?
    • 这是因为浏览器将使用与第一次加载页面时完全相同的参数和请求方法重新加载。如果您不想重复此操作,最好先将数据存储在 $_SESSION 中,然后执行 header("303 See Other")header("Location: $_SERVER['REQUEST_URI']") 以使用 GET 请求重新加载页面。
    • 感谢您的回答,但 ThiefMaster 给了我解决方案 :)
    • location.reload(true) 不发布任何内容,而是使用 GET 请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2022-12-08
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    相关资源
    最近更新 更多