我正试图写一个WordPress插件,我遇到了一个麻烦。
The Background: 我在使用的mySQL数据库中有一些数据(每一行都有一个唯一的ID和我添加的一些其他信息)。我可以使用
$heads = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}costumesdb WHERE location = \'head\'", ARRAY_A);
并使用表单向用户显示一些信息(这是5个不同下拉列表中的一个,但它们都是以相同的方式创建的)
<form id="createacostume" action= "admin-ajax.php" method="post">
Head: <select name="head">
<?php foreach ($heads as $head) { ?>
<option value="<?php echo $head[\'id\'] ?>"><?php echo $head[\'shopName\'] . " - " . $head[\'pieceName\'] ?></option>
<?php } ?>
</select>
<input type="submit">
将表单数据提交到服务器的脚本为:
<script type=\'text/javascript\'>
jQuery.ajax({
type: "POST",
url: ajax_url,
data: { action: \'my_action\' , param: \'st1\' }
}).done(function( msg ) {
alert( "Data Saved: " + msg.response );
});
</script>
在我的php文件中,服务器端是:
add_action(\'wp_ajax_my_action\', \'my_ajax_action_function\');
function my_ajax_action_function(){
$reponse = array();
if(!empty($_POST[\'param\'])){
$response[\'response\'] = "I\'ve get the param a its value is ".$_POST[\'param\'].\' and the plugin url is \'.plugins_url();
} else {
$response[\'response\'] = "You didn\'t send the param";
}
header( "Content-Type: application/json" );
echo json_encode($response);
exit();
The Problem: 如果我在表单中设置action=“admin ajax.php”,我将引导到admin ajax。带有“0”响应的php页面。
如何从WordPress管理页面的表单中获取数据并进行处理?
最合适的回答,由SO网友:Gathris 整理而成
我解决了这个问题并重新编写了代码:
jQuery(document).ready(function() {
jQuery(\'#createacostume\').submit(function( event ) {
event.preventDefault();
var aForm = jQuery(this);
var bForm = aForm.serializeArray();
bForm.push({name: \'action\', value: \'myAjaxFunction\'});
jQuery.ajax({
url: ajaxurl,
type: "POST",
data: bForm,
success: function(resp) {
alert("Thank you for your post. We will review it and approve it shortly" + resp);
},
error: function( req, status, err ) {
alert( \'something went wrong, Status: \' + status + \' and error: \' + err );
}
})
.fail(function() {
alert("error");
})
;
return false;
});
});
您必须将要调用的ajax函数推到表单上。