Can';t使用PHP$\u POST[]变量检索jQuery序列化表单数据

Can';t使用PHP$\u POST[]变量检索jQuery序列化表单数据,php,jquery,ajax,forms,Php,Jquery,Ajax,Forms,使用Ajax jQuery函数$.post(),我将jQuery序列化的()表单数据发送到一个PHP函数,该函数在$\u post[]中成功接收数据,但单个$\u post['form\u field']变量为空 在我的PHP函数中,print\r($\u POST)成功显示表单数据: Array ( [action] => send_message [data] => modal_name=olivier&modal_email=olivier%40hotmail.com&

使用Ajax jQuery函数
$.post()
,我将jQuery
序列化的()
表单数据发送到一个PHP函数,该函数在
$\u post[]
中成功接收数据,但单个
$\u post['form\u field']
变量为空

在我的PHP函数中,
print\r($\u POST)
成功显示表单数据:

Array ( [action] => send_message [data] => modal_name=olivier&modal_email=olivier%40hotmail.com&modal_message=Hello+world )
然而
$\u POST['modal\u name']
$\u POST['modal\u email']
$\u POST['modal\u message']
这些都是空的。为什么?

HTML:

使用
$(此).serializeArray()
代替
$(此).serialize()

参考资料:-

两者之间的区别:-

您需要执行以下操作:-


您应该使用
$\u POST['data']['modal\u name']
$\u POST['data']['modal\u email']
$\u POST['data']['modal\u message']
。还可以使用jQuery中的
$.serializeArray()


原因是您将表单数据作为名为
data

的参数发送,正如您在
$\u POST
中所看到的,您的
data
键包含一个序列化字符串。因此,您可以解析它,也可以不序列化两次,直接发送序列化的表单:
var data=$(this).serialize()
;谢谢,但是$\u POST['modal\u name']仍然是空的。看起来双重序列化把一切都搞砸了,现在可以用了,谢谢@drake035很高兴为您提供帮助:):)使用serializeArray()现在,$\u POST['data']['modal\u name']为空,$\u POST['modal\u name']也为空。
<form id='contact'>
  <input type='text' name='modal_name' id='modal_name' />
  <input type='email' name='modal_email' id='modal_email' />
  <textarea name='modal_message' id='modal_message'></textarea>
</form>
$('#contact').on('submit', function(e) {
  e.preventDefault();
  if (modal_name && modal_email && modal_message) {
    var data = {
      action: 'send_message',
      data: $(this).serialize()
    };
    $.post(WPaAjax.ajaxurl, data, function(response) {
      $('.modal').append(response);
    });
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form id='contact'>
  <input type='text' name='modal_name' id='modal_name' />
  <input type='email' name='modal_email' id='modal_email' />
  <textarea name='modal_message' id='modal_message'></textarea>
  <input type="submit" value = "submit">
</form>

<script type="text/javascript">
$('#contact').on('submit', function(e) {
  e.preventDefault();
  if (modal_name && modal_email && modal_message) {
     var data = $(this).serializeArray();
     data.push({name: 'action', value: 'send_message'});
     $.post('query.php', data, function(response) {
      $('.modal').append(response);
    });
  }
});
</script>
<?php

if(!empty($_POST)){
    echo "<pre/>";print_r($_POST);
}
?>
<pre/>Array
(
    [modal_name] => sdsadsa
    [modal_email] => a@gmail.com
    [modal_message] => sadada
    [action] => send_message
)
<script type="text/javascript">
$('#contact').on('submit', function(e) {
  e.preventDefault();
  if (modal_name && modal_email && modal_message) {
     var data = $(this).serialize()+ '&action=send_message';
     $.post('query.php', data, function(response) {
      $('.modal').append(response);
    });
  }
});
</script>