【问题标题】:Reload a page and reset URL重新加载页面并重置 URL
【发布时间】:2020-03-19 12:49:00
【问题描述】:

我从 mySQL 数据库表中获取项目列表,但是我在页面上有一些过滤器,这些过滤器负责更改变量的值,这些变量负责存储查询中的 ORDER BYLIMIT 值.

我这样做的方法是通过 JavaScript 更改 location.href,PHP 变量使用 $_GET[] 获取数据。当$_GET[]未设置时,例如在第一次访问页面时,会向查询发送一些模式值。

function itensPorPag() {

    let qtde = document.getElementById('select_itens').value;
    let order = document.getElementById('order_page').value;

    let offset = 0;

    let url = 'adm_conta.php?prod_qtde='+qtde+'&offset='+offset;

    location.href = url;

}

原网址:

adm_conta.php

过滤后的网址:

adm_conta.php?prod_qtde=4&offset=0

设置变量:

if (isset($_GET['prod_qtde'])) {
    $limit = $_GET['prod_qtde'];
    $offset = $_GET['offset'];
} else {
    $limit = '3';
    $offset = '0';
}

到目前为止一切顺利。当我需要重新加载页面而不应用任何过滤器时,问题就开始了,例如按下F5。这是因为如果我只是重新加载页面,变量将从 URL 接收值,因为设置了 $_GET[]

过滤后的网址:

adm_conta.php?prod_qtde=4&offset=0

重新加载页面后的 URL(它不会改变,因为它接收到相同的值):

adm_conta.php?prod_qtde=4&offset=0

我找到了一个解决方案,但它缺少一点点。我在 JavaScript 中使用 keyup event 来更改 URL,当按 F5CTRL + RCTRL + F5 重新加载页面时:

document.onkeyup = checkKey;

function checkKey(e) {

    if (e.keyCode == 82 && e.ctrlKey || e.keyCode == 116 && e.ctrlKey || e.keyCode == 116) {

        location.href = 'adm_conta.php';
    } 
}

效果很好。但是我也需要能够在通过单击重新加载按钮重新加载页面时执行相同的操作,而这正是缺少的。

这个按钮:

我曾尝试使用window.onbeforeunload,但它会在页面重新加载时触发,这会给我的应用程序带来麻烦,因为页面在应用过滤器后重新加载,在这种情况下我无法重置 URL。

我该怎么做?

我不接受建议,即使我必须改变我这样做的方式。

【问题讨论】:

    标签: javascript php url events reload


    【解决方案1】:

    只需使用PHP函数header()

    header('Location: http://www.example.com/');
    

    所以在设置你的变量之后

    if (isset($_GET['prod_qtde'])) {
    $limit = $_GET['prod_qtde'];
    $offset = $_GET['offset'];
    } else {
        $limit = '3';
        $offset = '0';
    }
    

    并使用它们让您知道什么只是发送标头以将用户浏览器重定向到同一位置但没有 url 查询。

    使用示例:

    header("刷新:0");

    => 刷新同一页面(也许是最好的解决方案)

    header("刷新:0; url=adm_conta.php");

    => 使用重定向刷新

    【讨论】:

    • 这不行,因为它不仅仅是重置URL,我需要在特定情况下,点击重新加载按钮时重置它。
    • 那么你应该改变你的逻辑,因为在你的 js 代码中你指的是默认的刷新按钮,因为它的浏览器的东西总是在 js 之前执行。示例如果您按 ctrl 和 f1 document.onkeyup = checkKey; function checkKey(e) { if (e.keyCode == 111 && e.ctrlKey) { console.log('trigger') location.replace('adm_conta.php'); } } 使按钮刷新 <input type="button" value="Refresh" onclick="checkKey();">,则此代码有效
    • 我明白了。但正如我在问题中所说,F5CTRL + R 工作正常。如果我使用onkeydown,你会是对的,但是使用onkeyup 它可以正常工作。我现在需要的是检测页面上刷新按钮的点击。我会在我的问题上添加一张图片,它会很清楚。
    • 如果您对默认行为有疑问,请使用 e.preventDefault()
    猜你喜欢
    • 2014-07-02
    • 2020-08-23
    • 2012-07-28
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2014-12-31
    相关资源
    最近更新 更多