Jquery Ajax表单提交在Wordpress插件中不起作用(400错误响应)
我已经做了几个小时了,但我似乎无法理解: 我有一个插入数据库行的表单,我正在通过admin-ajax.php进行jQuery.ajax调用 无论我尝试什么,我总是得到“400个坏响应” 我正在做的事情:Jquery Ajax表单提交在Wordpress插件中不起作用(400错误响应),jquery,ajax,wordpress,Jquery,Ajax,Wordpress,我已经做了几个小时了,但我似乎无法理解: 我有一个插入数据库行的表单,我正在通过admin-ajax.php进行jQuery.ajax调用 无论我尝试什么,我总是得到“400个坏响应” 我正在做的事情: 通过wp_localize_脚本传递ajax url。这似乎是 工作正常 添加动作挂钩wp_ajax和wp_ajax_nopriv 序列化我的表单。运行我以前在中测试过的查询 非ajax设置(工作) 这是类pluginname public.php function __construct()
function __construct() {
add_action('wp_enqueue_scripts', array($this, 'register_public_resources'));
add_action('wp_enqueue_scripts', array($this, 'enqueue_public_resources'));
add_action( 'wp_ajax_my_action_name', array($this, 'my_action_name') ); // If called from admin panel
add_action( 'wp_ajax_nopriv_my_action_name', array($this, 'my_action_name') );
add_action('wp_loaded', array($this, 'rws_popUpInit'));
}
function my_action_name(){
global $wpdb;
$tableprefix = $wpdb->prefix;
$table_name = $tableprefix.'wpr_roulettewheel';
$data = array(
'first_name' => $_POST['first-name'],
'last_name' => $_POST['last-name'],
'email_address' => $_POST['email'],
'phone_number' => $_POST['phone-number'],
);
$wpdb->insert( $table_name, $data);
wp_die();
}
wheelspin.js
jQuery("#rws_mainpopupform").submit(function(e){
e.preventDefault();
jQuery.ajax({
type:"POST",
url: popupdisplaysettings.ajaxurl,
action: "my_action_name",
data: jQuery("#rws_mainpopupform").serialize(),
error: function(response) {
console.log(response);
}
});
return false;
});
HTML:
function rws_popUpInit(){
echo'
<form id="rws_mainpopupform" class="ui large form" method="post" action="">
我明白了。这都是因为我没有正确地使用 “wp_ajax”和“wp_ajax_nopriv”钩子出现在网站的公共类中 即使您的代码运行/打算在公共类中运行,也需要在admin类中调用这些钩子。超级反直觉 从Wordpress抄本: 注意2:前端和后端Ajax请求都使用admin-Ajax.php,因此在操作处理代码中is_admin()将始终返回true当有选择地为前端和后端加载Ajax脚本处理程序时,并使用is_admin()函数时,wp_Ajax(操作)和wp_Ajax_nopriv(操作)挂钩必须位于is_admin()==true部分内
因此,要么将钩子放在is_admin部分中,要么使用DOING_AJAX或类似的方法实际的表名是什么。看起来您添加了两次前缀?它是“wa_wpr_roulettewheel”。我用非ajax方法测试了该查询,结果正常。无论如何,我可以用console.log('test')替换整个my_action_name()函数内容;我仍然收到400个错误响应。我还尝试用一些随机数据(不是我的表单)替换数据,同样的问题。我似乎连最基本的工作示例都拿不出来
$datatoBePassed = array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
);
wp_localize_script( 'wheelpopup', 'popupdisplaysettings', $datatoBePassed );