如何POST参数以使其不显示在查询字符串中,以确保用户无法直接在URL中更改值?

Eri*_*ert 0 html javascript forms parameters post

我有一个分页的搜索结果页面,目前页码包含在查询字符串中,如下所示:

mysite.com/search/database-search?name=smith&page=10

我不希望用户能够直接在网址中更改页码,他们应该只能通过单击页面按钮来更改页面.所以我需要从查询字符串中删除页面,但仍然将页码作为参数传递,以获得适当的结果页面.

我以为我可以通过使用POST代替GET来实现这一点; 我的页面按钮最初被设置为"href =/search/database-search?name = smith&page = xx"的链接,但我认为如果我使用表单来提交页码,那将会传递页码而不会在查询字符串中显示它.

这是我尝试的代码:

function postToPage(page) {
    debugger;
    var url = window.location.href;
    var newForm = $("<form>", {
        "action": url
    }).append($("<input>", {
        "name": "page",
        "value": page,
        "type": "hidden"
    }));
    newForm.submit();
}

<a onclick="postToPage($(this).text());" href="javascript:void(0)" class="page-button">@pageNum</a>
Run Code Online (Sandbox Code Playgroud)

但是,它没有像我预期的那样工作.当我单击一个页面按钮时,URL中的查询字符串被忽略,并且"page"仍然显示在查询字符串中,因此结果与我正在尝试完成的内容相反; 我丢失了我需要的查询参数,"page"是查询字符串中唯一仍然包含的内容.

当我点击页面按钮时,我被带到"/ search/database-search?page = x"

有没有办法将页面用作查询参数而不显示在URL中

编辑:我将我的表单方法更改为"POST",但"页面"变量正在丢失.现在包含当前查询字符串中的参数,但未使用页面值.

ixc*_*chi 7

看起来你没有将表单的方法设置为POST.

function postToPage(page) {
    debugger;
    var url = window.location.href;
    var newForm = $("<form>", {
        "action": url,
        "method": "POST" // set form to POST, instead of the default GET
    }).append($("<input>", {
        "name": "page",
        "value": page,
        "type": "hidden"
    }));
    newForm.submit();
}
Run Code Online (Sandbox Code Playgroud)