【问题标题】:Why doesn't data from my form buttons make it to my PHP server?为什么我的表单按钮中的数据不能发送到我的 PHP 服务器?
【发布时间】:2019-02-08 13:34:27
【问题描述】:

我正在使用 ajax 将表单数据发送到服务器,我在 $_POST 数组中接收所有数据服务器端,但来自提交按钮的数据除外。

HTML

<form id="mainForm" action="#" class="form-inline" enctype="multipart/form- 
data">
...
    <div id="success"></div>
    <button type="submit" id="makegocard" name="makegocard" value="clicked" 
    form="mainForm" class="btn btn-primary">Make My WebGoCard</button>

    <div id="preview"></div>
    <button type="submit" id="previewgocard" name="previewgocard" 
    form="mainForm" class="btn btn-primary">Preview My WebGoCard</button>
</form>

javascript JQuery AJAX:

$("#mainForm input,#mainForm textarea,#mainForm 
 button").jqBootstrapValidation({
    //preventSubmit: true,
    submitError: function($form, event, errors) {},
    submitSuccess: function($form, event) {
        //$("#btnSubmit").attr("disabled", true);
        event.preventDefault();

        var mainFormData = new FormData(event.target);

        $.ajax({
            url: "./addUserToDB.php",
            type: "POST",
            data: mainFormData,
            cache: false,
            contentType: false,
            processData: false,
            success: function(pResp) {
                $("#btnSubmit").attr("disabled", false);
                $('#success').html("<div class='alert alert-success'>");
                $('#success > .alert-success').html("<button type='button' 
                class='close' data-dismiss='alert' aria- 
                hidden='true'>&times;").append("</button>");
                $('#success > .alert-success').append(pResp);
                $('#success > .alert-success').append('</div>');
                //$('#mainForm').trigger("reset");
            },
            error: function(pError) {
                $('#success').html("<div class='alert alert-danger'>");
                $('#success > .alert-danger').html("<button type='button' 
                class='close' data-dismiss='alert' aria- 
                hidden='true'>&times;").append("</button>");
                $('#success > .alert-danger').append(pError);
                $('#success > .alert-danger').append('</div>');
                //$('#mainForm').trigger("reset");
            },
        })
    },
    filter: function() {
        return $(this).is(":visible");
    },
});

PHP:

echo print_r($_POST);
if(isset($_POST['makegocard'])){
...
}

echo 显示除了按钮数据和 if 语句总是返回 false 之外的所有内容?

任何帮助将不胜感激。

【问题讨论】:

  • 什么版本的jQuery?
  • 还有 event.target 不是按钮吗?也许试试var mainFormData = new FormData(document.getElementById("mainForm"));
  • 感谢您的帮助,它是 jQuery v3.3.1,不幸的是,我在进行更改后得到了相同的结果。
  • 由于 event.preventDefault(); 你必须将被点击的按钮添加到 formdata
  • 谢谢!那行得通:)

标签: javascript php html ajax


【解决方案1】:

原则上是FormData doesn't include value of buttons的副本

但既然你有一个验证,你需要做

var whichBut = {}; 
$("button[form=mainForm]").on("click",function() { 
  whichBut.name=this.name; 
  whichBut.value=this.value; 
}); 

然后再

var mainFormData = new FormData(event.target); 
mainFormData.set(whichBut.name,whichBut.value);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 2012-04-12
    相关资源
    最近更新 更多