Не удается получить с помощью пост-переменных PHP, сериализованных с помощью jQuery - PullRequest
0 голосов
/ 09 мая 2018

После отправки формы через Ajax с помощью jQuery и ее сериализации у меня возникают проблемы с получением переменных post с помощью PHP. Вот мой код:

JS (main.js)

$.ajax({
  url: WPaAjax.ajaxurl,
  type: 'post',      
  data: {
    action: 'send_message',
    data: $(this).serialize()
  },
  success: function(response) {
    $('.contact_form').html(response);
  }
});

PHP (functions.php)

<code>function load_scripts() {
  wp_enqueue_script('jquery');  
  wp_enqueue_script('main_js', get_stylesheet_directory_uri() . '/dist/scripts/main.js', array('jquery'), true);
  wp_localize_script('main_js', 'WPaAjax', array('ajaxurl' => admin_url('admin-ajax.php')));
}
add_action('wp_enqueue_scripts', 'load_scripts');

function send_message_function() { 
  echo $_POST['form_last_name'];
  echo '<br><br>';
  echo '<pre>' . print_r($_POST) . '
'; выход; } add_action ('wp_ajax_send_message', 'send_message_function'); add_action ('wp_ajax_nopriv_send_message', 'send_message_function');

При отправке формы отдельные переменные записи (например, $_POST['form_last_name']) пусты.

Если я печатаю переменную $ _POST, я получаю это:

Array ( [action] => send_message [data] => form_last_name=Johnson&form_first_name=David&form_email=djohnson%40hotmail.com&form_subject=&form_telephone=01110259923&form_code_postal=C11+3HR&form_message=test [some_variable] => some_value )

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вот как бы я решил это:

var data = { action: 'send_message' },
$form = $(this);
$.each( $form.serializeArray(), function () {
    data[ this.name ] = this.value;
} );

$.ajax( {
    ...
    data: JSON.stringify(data),
    ...
} )

Затем вы можете получить доступ к переменным через php как $_POST['action'] и $_POST['form_last_name']

0 голосов
/ 09 мая 2018

Чтобы извлечь значения из вставленной структуры:

Array ( 
  [action] => send_message 
  [data] => form_last_name=Johnson&form_first_name=David&form_email=djohnson%40hotmail.com&form_subject=&form_telephone=01110259923&form_code_postal=C11+3HR&form_message=test 
  [some_variable] => some_value 
)

Сделайте это следующим образом:

parse_str($_POST['data'], $temp)

// Now you can access those vars on $temp
echo $temp['form_last_name'];
echo $temp['form_first_name'];

Видите, вы пытаетесь получить доступ к полю $_POST['form_last_name'], которое на самом деле находится внутри строки запроса в поле $_POST['data'] вашего сообщения.

Взгляните на метод php parse_str и внимательно просмотрите $_POST данные, которые вы получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...