使用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提供的操作。 为此,我们将使用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);
。 这用于获取序列化的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()
的值,这就是它的名称。 如果要更改javascript
的action value
,请确保根据需要更新add_action
代码。