Jquery Ajax表单提交在Wordpress插件中不起作用(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()

我已经做了几个小时了,但我似乎无法理解: 我有一个插入数据库行的表单,我正在通过admin-ajax.php进行jQuery.ajax调用

无论我尝试什么,我总是得到“400个坏响应”

我正在做的事情:

  • 通过wp_localize_脚本传递ajax url。这似乎是 工作正常

  • 添加动作挂钩wp_ajax和wp_ajax_nopriv

  • 序列化我的表单。运行我以前在中测试过的查询 非ajax设置(工作)

  • 这是类pluginname public.php

    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 );