У меня есть форма с кнопкой отправки:
<form action="?edit-form" method="post" class="addEdit"> <input type="submit" name="delete-image" value="Delete Image"> </form>
Мой jQuery AJAX:
$.ajax({ url: $('form.addEdit').attr('action'), type: $('form.addEdit').attr('method'), data: $('form.addEdit').serialize(), success: function(html) { } });
В моем PHP я не могу получить этот $ _POST ['delete-image'] isset (), хотя кнопка отправки, отправившая форму, называется «delete-image».
if (isset($_POST['delete-image'])) { }
«delete-image» должен быть установлен, так как это была кнопка отправки, которую я нажал. Почему PHP не собирает этот опубликованный varaible из этого AJAX submit?
В jQuery documenation здесь: http://api.jquery.com/serialize/
Только последовательный контроль сериализуется, см. Документацию ниже:
Примечание. Только строки «успешный контроль» сериализуются в строку. Значение кнопки отправки не сериализуется, так как форма не была отправлена с помощью кнопки. Чтобы значение элемента формы было включено в сериализованную строку, элемент должен иметь атрибут имени. Значения из флажков и переключателей (входы типа «радио» или «флажок») включаются только в том случае, если они проверены. Данные из элементов выбора файлов не сериализованы.
Поэтому submit buttn не будет сериализоваться через функцию jQuery.serialize (). Работа вокруг – вы можете добавить скрытый ввод, и он будет сериализован.
ОБНОВИТЬ:
Вам нужно изменить форму submit ajax, чтобы связать нажатие кнопки. и в запросе ajax вы можете добавить значение кнопки вручную. Ниже мой код работает.
$( "#delImage" ).click(function( event ) { event.preventDefault(); $form = $(this).parent('form'); $btnid = $(this).attr('name'); $btnval = $(this).attr('value'); $.ajax({ url: $form.attr('action'), type: $form.attr('method'), data: { "btnid" : $btnid, "btnval": $btnval, "form-data": $form.serialize() }, success: function(html) { console.log(html); } }); });