Почему данные с моих кнопок формы не попадают на мой PHP-сервер?

Я отправляю данные формы на сервер с помощью 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'])){
...
}

Эхо показывает все, кроме данных кнопки, а оператор if всегда возвращает false?

Любая помощь будет оценена по достоинству.


person DecWebart    schedule 08.02.2019    source источник
comment
Какая версия jQuery?   -  person mplungjan    schedule 08.02.2019
comment
Кроме того, event.target - это не кнопка? Возможно, попробуйте var mainFormData = new FormData(document.getElementById("mainForm"));   -  person mplungjan    schedule 08.02.2019
comment
Спасибо за помощь, это jQuery v3.3.1, к сожалению, я получил те же результаты после внесения этого изменения.   -  person DecWebart    schedule 08.02.2019
comment
Вы должны добавить кнопку, которая была нажата, в данные формы из-за event.preventDefault();   -  person mplungjan    schedule 08.02.2019
comment
Можете ли вы привести пример кода?   -  person DecWebart    schedule 08.02.2019
comment
Похоже, он проходит событие отправки.   -  person DecWebart    schedule 08.02.2019
comment
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);   -  person mplungjan    schedule 08.02.2019
comment
Спасибо! Это сработало :)   -  person DecWebart    schedule 08.02.2019
comment
Я разместил как ответ, потому что ваша проверка усложнила его   -  person mplungjan    schedule 08.02.2019
comment
Вы можете просмотреть эту мета-публикацию, чтобы узнать, как принять   -  person mplungjan    schedule 08.02.2019


Ответы (1)


В принципе дубликат FormData не включает значение кнопок

Но поскольку у вас есть проверка, вам нужно сделать

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);
person mplungjan    schedule 08.02.2019