插件类中的Wordpress ajax admin-ajax.php 400

时间:2019-04-30 13:07:31

标签: php jquery ajax wordpress

我试图在我的插件类中调用ajax函数。但是控制台在for cl in tqdm(classes.compute()):

上显示400错误

我尝试在构造函数中和函数中添加ajax钩子(如此处所示),但是它们都不起作用。但是在类之外,PHP ajax函数可以按预期工作。

(我是插件开发和OOP的新手,所以请分享一些最佳实践)

for cl in classes.compute():

2 个答案:

答案 0 :(得分:0)

尝试一下。未经测试

<?php
/*
Plugin Name: Test
Version: 1.0
Plugin URI: 
Description: test desc
Author: Vel
Author URI: Test
*/

class Wps_Wc_Sync {

  function  __construct(){
    add_action( 'wp_enqueue_scripts', array($this, 'wpsp_enqueue_scripts_styles')  );
    add_action('wp_ajax_wpsp_admin_ajax_method', array($this, 'wpsb_fnc_ajax_handler'));
    add_action('wp_ajax_nopriv_wpsp_admin_ajax_method', array($this, 'wpsb_fnc_ajax_handler'));
    add_action("wp_footer", array($this, "ajax_call_footer"));
  }

    public function wpsp_enqueue_scripts_styles(){
        echo '<script>var wpsp_admin_ajax_url = "'.admin_url("admin-ajax.php").'";</script>';
    }

    public function wpsb_fnc_ajax_handler(){
        $gotomethod = trim($_POST['gotomethod']); 
        if(!empty($gotomethod) && method_exists($this, $gotomethod)){
            $rtnval = call_user_method($gotomethod,$this, $_POST); 
            die($rtnval);
        }else
             die('no-method found');
    }

    public function test(){
        print_r($_POST);
        exit;
    }

    public function ajax_call_footer(){
    ?>
        <script> 
        jQuery( document ).ready(function($) {
            console.log('ajax');

            parseCsvAjax(0);

            function parseCsvAjax(lastfile = 0) {
                jQuery.ajax({
                    type: "POST",                  
                    url: wpsp_admin_ajax_url,                   
                    data: {
                        action: 'wpsb_fnc_ajax_handler',
                        gotomethod:'test',
                        lastfile: lastfile,
                    },
                    success: function (data) {
                        console.log(data);
                    },
                    error: function (jqXHT, textStatus, errorThrown) {console.log('Error');}
                });
            }

        });
        </script>
    <?php
    }
}

$wps_wc_sync = new Wps_Wc_Sync();

答案 1 :(得分:0)

以上答案无效。 但是有效的方法是在我的插件init(插件的主文件)中调用该类。

function run_wps_wc() {

    $plugin = new Wps_Wc();
    $plugin->run();

    $sync = new Wps_Wc_Sync();

}

run_wps_wc();