Данные формы пусты при отправке формы через ajax с использованием jQuery в WordPress

19 июл. 2017 г., 14:34:14
Просмотры: 40.3K
Голосов: 2

Я отправляю форму через ajax используя jquery в WordPress, но к сожалению получаю пустую форму в console.

Вот мой jquery код -

function step1SaveData(){
    var formData = new FormData(jQuery('#tpform1')[1]);
    console.log(formData);
    jQuery.ajax({
        type:"POST",
        url:'http://lexem.in/wp-admin/admin-ajax.php',
        processData:false,
        contentType:false,
        data:{
            action:'tpartners',
            formdata:formData,
        },
        success:function(data){
            var insertedID = data.trim();
            if(insertedID!='fail'){
            }else{
                console.log('fail');
            }
        }

    });

}

А вот код моего ajax файла -

add_action( 'wp_ajax_tpartners', 'save_update_data' );
add_action( 'wp_ajax_nopriv_tpartners', 'save_update_data' );

function save_update_data(){

    print_r($_POST);
    print_r($_FILES);

} 

Ajax файл возвращает 0.

Пожалуйста, помогите разобраться.

Заранее спасибо.

8
Комментарии

@GrayCarry теперь выдаёт ошибку, что site_url не определён.

Vipin Vipin
19 июл. 2017 г. 15:02:52

site_url() - это PHP функция, а у вас, если я правильно понял вопрос, используется Javascript код

mrben522 mrben522
19 июл. 2017 г. 15:30:55

Нам нужно увидеть ваш HTML, чтобы диагностировать проблему. Если console.log возвращает null, значит у вас ошибка в получении данных формы. Могу я спросить, почему вы используете FormData вместо .serialize()?

mrben522 mrben522
19 июл. 2017 г. 15:34:33

@mrben522 Да, это код jQuery.

Vipin Vipin
19 июл. 2017 г. 15:35:26

@mrben522 на самом деле мне нужно также загружать изображение, поэтому я использую функцию FormData().

Vipin Vipin
19 июл. 2017 г. 15:36:17

покажите нам ваш HTML

mrben522 mrben522
19 июл. 2017 г. 15:41:07

@mrben522, Да, теперь у меня есть данные (13) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object] в консоли, но в PHP POST всё ещё пуст.

Vipin Vipin
19 июл. 2017 г. 15:46:18

@mrben522 HTML очень большой, можно ли его разместить здесь? Пожалуйста.

Vipin Vipin
19 июл. 2017 г. 15:47:50
Показать остальные 3 комментариев
Все ответы на вопрос 1
6

Попробуйте использовать .serialize() вместо FormData

 function step1SaveData(){
    var formData = jQuery('#tpform1').serialize();
    console.log(formData);
    jQuery.ajax({
        type:"POST",
        url:'http://lexem.in/wp-admin/admin-ajax.php',
        data:{
            action:'tpartners',
            formdata:formData,
        },
        success:function(data){
            var insertedID = data.trim();
            if(insertedID!='fail'){
            }else{
                console.log('fail');
            }
        }

    });

}

Или используйте .serializeArray(), если вам нужны данные в виде массива, а не строки.

РЕДАКТИРОВАНИЕ - согласно комментариям, удалите processData:false и contentType:false из ajax-запроса

19 июл. 2017 г. 15:37:25
Комментарии

Я использовал функцию .serialize(), но, к сожалению, она не передает данные файлов.

Vipin Vipin
19 июл. 2017 г. 15:39:49

Хорошо, теперь я использую функцию serializeArray() и посмотрим, что получится... скоро обновлю информацию.

Vipin Vipin
19 июл. 2017 г. 15:40:47

Теперь данные выводятся в консоли при использовании функции serializeArray(), но POST все еще пуст, к сожалению.

Vipin Vipin
19 июл. 2017 г. 15:48:39

Итак, проблема решена следующими шагами - 1. Убрать processData:false из ajax запроса 2. Убрать contentType:false из ajax запроса 3. Использовать функцию serializeArray() вместо FormData().

Спасибо за помощь. Удачи

Vipin Vipin
19 июл. 2017 г. 15:58:54

@Vipin, не мог бы ты отредактировать этот ответ или разместить свой собственный с твоим решением? Я не понял, как заменить formdata на serializeArray.

Basti Basti
8 окт. 2017 г. 21:06:41

Это не отправляет файлы из формы.

Lifz Lifz
8 нояб. 2018 г. 17:00:33
Показать остальные 1 комментариев