WordPress admin-ajax returns “0” 在面向查看者的一侧

WordPress admin-ajax returns "0" on the Viewer-Facing Side

我是 Wordpress 插件方面的新手,所以我有一个问题要问你们。我在网站面向查看者的一侧调用 admin-ajax 时遇到问题。我在 wordpress 帖子中使用短代码来建立链接,该链接必须调用 ajax 操作。不幸的是每次都是 admin-ajax.php returns 0。看看我的代码,也许你可以帮助我发现我做错了什么。

PHP 端:

class myClass {

    public function __construct() {
        if (defined('DOING_AJAX')) {
            add_action( 'wp_ajax_myAction', array($this, 'myCallback') );
            add_action( 'wp_ajax_nopriv_myAction', array($this, 'myCallback') );
        }
    }

    public function myCallback() {
        echo "test";
        die();
    }
}

并且在 Javascript 中有 Ajax 调用:

jQuery(document).ready(function($) {
    var link = $('a.myLink');
    link.on('click', function(e) {
        $.ajax({
            url: 'http://127.0.0.1/myapp/wp-admin/admin-ajax.php',
            type: 'POST',
            data: 'myAction',
            success:function(data) {
                console.log(data);
            },
            error: function(error) {
                console.log(error);
            }
        });   
    });
});

您知道为什么该代码不起作用并且 admin-ajax.php returns“0”吗?

尝试使用这种格式的 ajax 调用:

jQuery(document).ready(function($) {
    var link = $('a.myLink');
    link.on('click', function(e) {
       var details = {
            'action': 'myAction'
        };

        $.ajax({
            url: 'http://127.0.0.1/myapp/wp-admin/admin-ajax.php',
            type: 'POST',
            data: details,  // data format
            success:function(data) {
                console.log(data);
            },
            error: function(error) {
                console.log(error);
            }
        });   
    });
});

希望对您有所帮助...

已解决!两件事:

data: 'myAction'

替换为

data: {
    action: 'myAction'
}

在主插件文件中我有

if ( is_admin() ) {
    // there should be new myClass() too
} else {
    $class = new myClass();
}

感谢您的建议!

在您的 Ajax 请求之前尝试使用 Enque JQuery Form Plugin

add_action('wp_print_scripts','include_jquery_form_plugin');
function include_jquery_form_plugin(){
        wp_enqueue_script( 'jquery' );
        wp_enqueue_script( 'jquery-form',array('jquery'),false,true ); 
}