簡體   English   中英

為什么序列化不包含提交按鈕名稱?

[英]Why serialize does not include submit button name?

為什么序列化(Jquery)不包含提交按鈕名稱?

在PHP中,我通常這樣做:

if (isset($_POST['submit_signup'])) {
    print_r($_POST);
    //Then check firstname, password, etc POSTS
}

那不起作用,對此有什么解決方案?

不確定這是否是最優雅的解決方案,但是您可以使用隱藏的輸入框來包含一個值(最好是發生變化的值,例如某種哈希),然后進行檢查。 喜歡:

<input type="hidden" name="signup_submitted" value="random_hash" />

在您的代碼中,您可以執行以下操作:

if(isset($_POST['signup_submitted']))
{
    // Do your work;
}

警告:這里的哈希值不是安全的事情,而只是一種處理您習慣的方法。

小更新:我注意到您還問過“為什么”,jQuery在serialize()輸出中不包含Submit按鈕。 這是HTML草案中指定的默認行為。 只要沒有按下提交按鈕,就不應將其包含在已提交(或序列化)的數據中。 JQuery創建者決定尊重這一點,並且不將其包括在序列化字符串中。

類型為“ submit”的<input>標簽的“ value”屬性用於確定標簽-提交按鈕的標簽。 它不是要發送的。

您要求的替代解決方案可能是類型為“隱藏”的<input>標記,其中包含特定於其所居住表單的值。

這是一個例子:

<form method="post">
    <input type="hidden" value="my_form" />
    <!-- Everything else goes here unchanged. -->
</form>

然后在PHP中,您可以使用類似以下內容的東西:

if(isset($_POST["my_form"]))
{
    // Deal with the sent data.
}

首先處理單擊,然后使用.serializeArray();提交並合並數組,似乎是一種更優雅的解決方法.serializeArray(); .push 即使具有更多提交按鈕的表單也可以使用:

<script type="text/javascript">
$(document).ready(function() {

    var submitname;
    $("#submit_signup").click(function(event) { 
        submitname='submit_signup'; 
    });


    $('#myform').submit(function( event ){
        var postarray = $('#myform').serializeArray();
        postarray.push({name: submitname, value: 1});

        $.post('script/myscript.php',postarray, function(data){
                /* do what you need with data variable */
            })
    event.preventDefault(); // avoid to execute the actual submit of the form.
    })
})
</script>

在這種情況下,您的提交字段應具有id屬性“ submit_signup”。

<input type="submit" id="submit_signup" name="submit_signup" value="Submit your form" />

您可以檢查它是否為php代碼中的發布請求:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // ...
}

暫無
暫無

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

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