使用ajax(wordpress)将表单从Jquery发送到PHP

我有一个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文件的警报事件中,它会警告序列化表单,如何反序列化此表单以仅提醒名称字段?

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

这是如何在Wordpress中不使用AJAX的一个主要示例。

首先,您需要了解wordpress提供的操作。 为此,我们将使用noprivgeneric.

 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); 。 这用于获取序列化的jQueryformsvar1=a&var2=b ….等,并将其转换为数组,然后我们可以在其中提取变量。 如果成功发布,该函数将返回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()的值,这就是它的名称。 如果要更改javascriptaction value ,请确保根据需要更新add_action代码。