Отправка данных формы и действия в wordpress admin-ajax.php

У меня есть форма, которую я хочу отправить на admin-ajax:

<form method = "POST" id = "form">
    <input type = "text" name = "name">
    <input type = "number" name = "phone">
    <input type = "email" name = "email">
    <textarea name = "overview"></textarea>
    <input type = "submit" name = "submit" id = "submit" value = "Submit">
</form>

Код Javascript / jQuery для отправки данных с использованием Ajax:

document.getElementById('submit').addEventListener('click', function(e){
    e.preventDefault();
    var form_data = $('#form').serialize();
    $.ajax('http://mywebsite.com/wordpress/wp-admin/admin-ajax.php', {
        method: "POST",
        data: form_data + {action: 'my_action'},
        success: function (response) {
            console.info(response);
        },
        error: function (err) {
            console.info('Error:' + err);
        }
    });
});

Также пробовал formData:

var form_data = new FormData();
form_data.append('form', $('#custom').serialize());
form_data.append('action', 'my_action');

Как отправить данные формы и действие my_action?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
1 467
3

Ответы 3

вам нужно изменить эту строку с data: form_data + {action: 'my_action'}, на data: {action: 'my_action', form_data:form_data},

jQuery(document).on("click","#submit", function(){
    e.preventDefault();
    var form_data =jQuery('#form').serializeArray();
    jQuery.ajax('http://mywebsite.com/wordpress/wp-admin/admin-ajax.php', {
        method: "POST",
        data: {action: 'my_action', form_data:form_data},
        success: function (response) {
            console.info(response);
        },
        error: function (err) {
            console.info('Error:' + err);
        }
    });
});

и измените тип входа submit на button.

Зачем менять тип ввода на кнопку?

user9853119 08.09.2018 10:13

если вы хотите использовать ajax, не нужно использовать кнопку отправки

Vel 08.09.2018 10:14

если вы используете кнопку отправки, вы можете получить значение на $_POST

Vel 08.09.2018 10:15

Что, если один из этих входов - образ <img src = "data:image/png;base64,iVBORw0KGgo= = " name = "picture">? Я удаляю часть кода src, так как он очень длинный

user9853119 08.09.2018 10:24

попробуйте вот так var form_data = $('#form').serializeArray(); form_data .push({ name: "<something>", value: "<somevalue>" });

Vel 08.09.2018 10:27

вот решение для вас: stackoverflow.com/questions/10398783/…

Sigma 08.09.2018 10:52

@Sigma, он хочет отправить изображение в ajax

Vel 08.09.2018 10:59

В примере кода я вижу только имя, телефон, адрес электронной почты и текстовую область, я полагаю, как комментарий, если он хочет отправить изображение в качестве дополнительного параметра в сериализованную форму, может быть лучшим решением является включение скрытого ввода в форму где находится изображение, а не просто отправить сериализованную форму без необходимости использования дополнительных параметров

Sigma 08.09.2018 11:13

В общем, я предпочитаю использовать этот способ, как и в вашем случае, вы используете кнопку типа отправки:

$(document).on('click', '#submit', function(){ // the id of your submit button
     var form_data = $('#your_form_data_id'); // here is the id of your form
     form_data.submit(function (e) {
        var my_action = "my_action";
        e.preventDefault();
           $.ajax({
              type: form_data.attr('method'), // use this if you have declared the method in the form like: method = "POST"
              url: form_data.attr('action'), // here you have declared the url in the form and no need to use it again or you can also use the path like in your code
              data: form_data.serialize() +'&'+$.param({ 'my_action': my_action}), // here you are sending all data serialized from the form and appending the action value you assing when declare var my_action
              success: function (data) {
                    // after the success result do your other stuff like show in console, print something or else
              },
           });
      });
 });

Надеюсь, это поможет тебе. если что-то непонятно, смело спрашивайте, постараюсь объяснить в комментариях.

Вы должны просто передать форму в new FormData (), поэтому в вашем случае при отправке формы просто передайте new FormData (e.target);

Надеюсь, это поможет

Другие вопросы по теме