使用Ajax jQuery函数$.post()
,我将jQuery serialized()
表单数据发送到PHP函数,该函数在$_POST[]
成功接收它,但个别$_POST['form_field']
变量是空。
在我的PHP函数中,print_r($_POST)
成功显示了表单数据:
Array ( [action] => send_message [data] => modal_name=olivier&modal_email=olivier%40hotmail.com&modal_message=Hello+world )
然而$_POST['modal_name']
,$_POST['modal_email']
和$_POST['modal_message']
是空的。为什么呢?
HTML:
<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>
JS:
$('#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);
});
}
});
答案 0 :(得分:2)
使用$(this).serializeArray()
代替$(this).serialize()
参考: - https://api.jquery.com/serializeArray/
两者之间的区别: - https://stackoverflow.com/a/10430571/4248328
您需要执行以下操作: -
<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中: -
<?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
)
注意: - 如果您只想使用serialize()
,请执行以下操作: -
<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>
答案 1 :(得分:0)
您应该使用$_POST['data']['modal_name']
,$_POST['data']['modal_email']
和$_POST['data']['modal_message']
代替。也可以使用jQuery中的$.serializeArray()
。
原因是您将表单数据作为名为data
的参数发送。