[英]Send a form from Jquery to PHP with ajax (wordpress)
我有一个javascript文件序列化并将表单发送到php函数:
function call_ajax(){
var data2 = jQuery('#newIdeaForm').serialize(); // <--- Important
jQuery.ajax({
type: 'POST',
url: myAjax.ajaxurl,
data: ({action : 'savedata',data : data2}),
success: function() {
alert(data2);
}
});
};
问题是我不知道如何在此php函数中接收此表单:
function savedata(){
$my_post = array(
'post_title' => 'data.name',
'post_content' => 'data.idea',
'post_status' => 'publish',
'post_author' => $user_id,
);
wp_insert_post($my_post);
die();
}
表单的某些字段是'name'和'idea',我知道var data2接收了序列化的表单,但是不知道如何将这种表单放入php函数中。
另一个问题:在javascript文件的警报事件中,它会警报序列化的表单,我如何才能反序列化此表单以仅警报名称字段?
这是如何在Wordpress中不使用AJAX的主要示例。
首先,您需要了解wordpress提供的操作。 为此,我们将同时使用nopriv
和generic.
add_action('wp_ajax_nopriv_savedata', 'my_ajax_handler');
add_action('wp_ajax_savedata', 'my_ajax_handler');
现在,我们需要定义my_ajax_handler()
函数并将其配置为仅解析我们发送的ajax请求(稍后会详细介绍)
function my_ajax_handler(){
switch($_REQUEST['fn']):
case 'savedata' :
echo my_ajax_save_form($_REQUEST['data']);
break;
endswitch;
}
然后,我们需要定义my_ajax_save_form()
函数,以便触发实际的WP Post提交。
function my_ajax_save_form($arr){
$post_vars = array();
$data = parse_str($arr, $params);
$my_post = array(
'post_title' => $data['name'],
'post_content' => $data['idea'],
'post_status' => 'publish',
'post_author' => $user_id, //where did this come from?
);
if(wp_insert_post($my_post)) return true;
return false;
}
上面最$data = parse_str($_REQUEST, $params);
是$data = parse_str($_REQUEST, $params);
。 这用于采取序列化的jQuery形式var1=a&var2=b
.... etc,并将其转换为数组,然后可以在其中提取变量。 如果成功发布,该函数将返回true,否则返回false。 最后,您需要更新ajax函数以提供要switched()
的新fn
参数。
jQuery.ajax({
type: 'POST',
url: ajaxurl, //wordpres supplies this global variable. use it.
data: ({fn: 'savedata', action : 'savedata',data : data2}),
success: function(resp) {
if(!resp){ alert ('Failed!')}else{ alert(data2) }
}
});
需要注意的是,在发出ajax请求时,WP将action
参数保留为add_action()
的值,这就是为什么将其如此命名的原因。 如果要在javascript
更改action value
,请确保根据需要更新add_action
代码。
serialize()
将生成一个表单编码的字符串,如下所示:
name=foo&email=foo@bar.com&age=86
如果您将对象传递给data
jQuery会默认将其转换为这种格式。
因此,将序列化和对象混合会很棘手,因此最好坚持使用一种方法或另一种方法。
尝试这个:
var data2 = jQuery('#newIdeaForm').serialize()
jQuery.ajax({
type: 'POST',
url: myAjax.ajaxurl,
data: data2 + '&action=savedata',
success: function() {
.....
}
});
现在,您可以使用$_POST['fieldName']
访问所有表单name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.