Как использовать $.serialize() в ajax на wordpress

175
23 февраля 2018, 17:14

Есть вот такой код и он работает:

form.submit(function () { 
   var data = { 
       action: 'mig', // Указываем action который будет обрабатывать 
       // Записываем значения полей. В проекте их гораздо больше и это сильно загромождает код 
       name: $(this).find('input[name="message_name"]').val(), 
       tel: $(this).find('input[name="message_tel"]').val(), 
    }; 
    // Использую для проверки alert 
    $.post( mig.ajaxurl, data, function (r) { 
          alert(r) 
    }); 
    return false; 
});
<?php 
 
add_action('wp_ajax_mig', 'mig_mail'); 
add_action('wp_ajax_nopriv_mig', 'mig_mail'); 
 
function mig_mail (){ 
     
    $name = !empty($_POST['name']) ? "Имя: " . trim($_POST['name']) . "\n" : ""; 
    $tel = !empty($_POST['tel']) ? "Телефон: " . trim($_POST['tel']) . "\n" : ""; 
 
    $message = "$name$tel"; 
     
    echo $message; // Использую для проверки 
 
    wp_die(); 
}

Однако в реальном проекте полей больше и я хочу использовать .serialize(), чтобы код выглядел как-то так:

form.submit(function () { 
   var data = { 
       action: 'mig', 
       data: $(this).serialize(), // Удобная красивая запись. При возможном изменении полей в будущем можно будет сюда не лезть 
    }; 
    $.post( mig.ajaxurl, data, function (r) { 
          alert(r) 
    }); 
    return false; 
});
<?php 
 
add_action('wp_ajax_mig', 'mig_mail'); 
add_action('wp_ajax_nopriv_mig', 'mig_mail'); 
 
function mig_mail (){ 
     
    $name = !empty($_POST['name']) ? "Имя: " . trim($_POST['name']) . "\n" : "";  
    $tel = !empty($_POST['tel']) ? "Телефон: " . trim($_POST['tel']) . "\n" : ""; 
 
    $message = "$name$tel"; // Пустая строка 
 
    echo $_POST['data']; // Вернет строку,  
    // например "message_tel=%2B7(215)364-75-86&current_services=&submitted=1"  
    // Как правильно достать нужные значения? 
 
    wp_die(); 
}

Answer 1

Используйте urldecode и parse_str

function mig_mail (){
    $data = urldecode( $_POST['data'] );
    parse_str( $data, $arr );
    echo $arr['message_name'];
    echo $arr['message_tel'];
    wp_die();
}
READ ALSO
Firebase Database дублирует запись при push()

Firebase Database дублирует запись при push()

В результате выполнения кода в БД появляется сразу два новых узла, как будто команда push() выполняется два разаВ консоль сообщение с nameOfUser...

164
Ошибка в ajax запросе, не видит data

Ошибка в ajax запросе, не видит data

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

167
Проблема с visibility

Проблема с visibility

Такой вопрос,я в менюшке сделал,для невидимых элементов вместо dislay: none, visibility:hidden, при наведении на li менюшки вылезает еще одна с visibility:visible,...

139
Получения элемента с таблицы (jquery)

Получения элемента с таблицы (jquery)

В общем у меня есть примерно такой код:

185