簡體   English   中英

如何在 URL 中傳遞 POST 參數?

[英]How can I pass POST parameters in a URL?

基本上,我認為我做不到,但我會很高興被證明是錯誤的。

我在 PHP 中動態生成 HTML 菜單,為每個當前用戶添加一個項目,以便我得到類似<a href="process_user.php?user=<user>> GET 的內容。

有沒有辦法將信息作為 POST 參數傳遞,而不是從可點擊的 HREF 鏈接獲取?

我不允許使用 JavaScript。


看起來Rob 正在使用“您可以使用按鈕而不是錨點並將按鈕設置為看起來像鏈接的樣式。這樣您就可以在同一表單內的隱藏字段中通過 POST 發送您的值”

您可以使用樣式為鏈接的表單。 不需要 JavaScript:

<form action="/do/stuff.php" method="post">
    <input type="hidden" name="user_id" value="123" />
    <button>Go to user 123</button>
</form>

CSS:

button {
    border: 0;
    padding: 0;
    display: inline;
    background: none;
    text-decoration: underline;
    color: blue;
}
button:hover {
    cursor: pointer;
}

見: http://jsfiddle.net/SkQRN/

URL 中的參數是 GET 參數,請求正文(如果存在)是 POST 數據。 因此,根據定義,您的基本前提是無法實現的。

您應該根據操作選擇使用 POST 還是 GET。 任何破壞性操作,即永久更改服務器的 state 的操作(刪除、添加、編輯)都應始終由 POST 請求調用。 任何純粹的“信息檢索”都應該可以通過不變的 URL(即 GET 請求)訪問。

要發出 POST 請求,您需要創建一個<form> 可以使用 Javascript 來創建 POST 請求,但我不建議將 Javascript 用於如此基本的事情。 如果您希望提交按鈕看起來像一個鏈接,我建議您使用普通提交按鈕創建一個普通表單,然后使用 CSS 重新設置按鈕的樣式和/或使用 Javascript 將按鈕替換為提交表單的鏈接使用 Javascript (取決於更好地再現所需行為的內容)。 那將是漸進增強的一個很好的例子。

您可以使鏈接在單擊時執行 Ajax 發布請求。

在 jQuery 中:

$('a').click(function(e) {
    var $this = $(this);
    e.preventDefault();
    $.post('url', {'user': 'something', 'foo': 'bar'}, function() {
        window.location = $this.attr('href');
    });
});

您還可以使用 JavaScript 使鏈接提交 POST 表單:

<form action="url" method="post">
    <input type="hidden" name="user" value="something" />
    <a href="#">CLick</a>
</form>

<script>
    $('a').click(function(e) {
        e.preventDefault();
        $(this).parents('form').submit();
    });
</script>

我也想分享我的實現。 不過,它確實需要一些 JavaScript 代碼。

<form action="./index.php" id="homePage" method="post" style="display: none;">
    <input type="hidden" name="action" value="homePage" />
</form>

<a href="javascript:;" onclick="javascript:
document.getElementById('homePage').submit()">Home</a>

這樣做的好處是,與 GET 請求相反,它不顯示 URL 中的參數,這樣更安全。

首先,免責聲明:我不認為將 POST 與 URL 參數結合是一個絕妙的主意。 像其他人建議的那樣,您最好使用隱藏表單來傳遞用戶信息。

然而,一個問題讓我很好奇 PHP 是如何處理這種情況的。 事實證明,理論上是可行的。 這是一個證明:

post_url_params.html

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <form method="post" action="post_url_params.php?key1=value1">
            <input type="hidden" name="key2" value="value2">
            <input type="hidden" name="key3" value="value3">
            <input type="submit" value="click me">
        </form>
    </body>
</html>

post_url_params.php

<?php
    print_r($_POST);
    print_r($_GET);
    echo $_SERVER['REQUEST_METHOD'];
?>

Output

Array ( [key2] => value2 [key3] => value3 )
Array ( [key1] => value1 )
POST

可以清楚地看到,PHP 將 URL 參數存儲在$_GET變量中,將表單數據存儲在$_POST變量中。 不過,我懷疑它非常特定於 PHP 和服務器,並且絕對不是可以依賴的東西。

不,你不能那樣做。 我邀請您閱讀POST 定義

或本頁:HTTP,請求方法

如果 PHP 腳本為每個帶有隱藏字段的條目生成一個表單,並且 href 使用 JavaScript 發布表單,這可能會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM