使用类从插件调用AJAX

时间:2018-11-12 作者:Jhonatan Villena

我正在制作一个带有类和方法的插件。

这个类通过主题(硬编码)被调用来排队并本地化我的js。它还为ajax做了准备。然而,我不断得到错误:400

发布http://www.devsite.local/wp-admin/admin-ajax.php 400(错误请求)

我在一个类之外的多个插件和函数中运行过ajax。php没有问题,但我无法让它在类中工作。

这是我的代码:

class CCYTFeatured {
public function __construct(){
        $this->cc_yt_scripts();
        add_action( \'wp_enqueue_scripts\', array($this, \'cc_yt_scripts\' ));

        add_action( \'wp_ajax_cc_yt_featured\', array( $this, \'cc_yt_featured\' ) );
        add_action( \'wp_ajax_nopriv_cc_yt_featured\', array( $this, \'cc_yt_featured\' ) );

}
// Load CSS AND JAVA FRONT END
public function cc_yt_scripts() {
    wp_register_style( \'cc_yt_style\',
        plugins_url( \'/css/cc_yt.css\', __FILE__ ),
        array(),
        cc_yt_version()
        );
    wp_enqueue_style(\'cc_yt_style\');

    // JAVASCRIPT
    wp_register_script( \'cc_yt_javascript\',
        plugins_url( \'/js/cc_yt.js\', __FILE__ ),
        array(\'jquery\'),
        cc_yt_version(),
        true
    );
    wp_enqueue_script(\'cc_yt_javascript\');
    wp_localize_script(
        \'cc_yt_javascript\',
        \'cc_yt_script\',
        array(
            \'ajaxurl\'   => admin_url( \'admin-ajax.php\' , __FILE__ ),
            \'ajax_nonce\' => wp_create_nonce(\'my_nonce\'),
        )
    );
}
public function cc_yt_featured(){

    check_ajax_referer( \'my_nonce\', \'security\' );
    echo json_encode(\'IM HERE, YOU CAN FIND US\');
}
}
这是我的JavaScript ajax调用:

jQuery.ajax({
    url: cc_yt_script.ajaxurl,
    type : \'POST\',
    data: {
        action : \'cc_yt_featured\',
        security: cc_yt_script.ajax_nonce,
        post: \'bananas\',
    },
    success: function(response) {
        console.log(\'THIS IS THE RESPONSE:  \'+ response);
    }
});
我不断遇到同样的错误,我无法找出我的班级出了什么问题:

这就是我所说的。

$cc_yt = new CCYTFeatured;
我把这个调用硬编码在一个主题文件中。这会成功地将样式和脚本排入队列。

ajax get如下所示:

http://www.devsite.local/wp-admin/admin-ajax.php?action=cc_yt_featured&security=79e39910b8&post=bananas

有人知道我做错了什么吗??

谢谢

1 个回复
SO网友:Jhonatan Villena

除了我打电话的方式外,所有的代码都是正确的。

我为\\uu construct创建了一个不同的方法,然后在插件it self上调用它,以便脚本和样式在模板之前挂钩。在我的模板中,我再次调用了该类以及我需要的方法。我不再一下子构建我的方法。

结束