[英]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.