WordPress admin-ajax在Viewer-Facing Side返回“0”

时间:2015-01-09 09:24:52

标签: javascript php jquery ajax wordpress

我在Wordpress插件中很新,所以我有个问题。我在站点的面向浏览器的一侧遇到admin-ajax调用问题。我在wordpress帖子中使用短代码来创建一个必须调用ajax动作的链接。不幸的是,admin-ajax.php每次都返回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返回“0”?

3 个答案:

答案 0 :(得分: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);
            }
        });   
    });
});
希望它有所帮助...

答案 1 :(得分:0)

解决!两件事:

data: 'myAction'

替换为

data: {
    action: 'myAction'
}

在主插件文件中我有

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

感谢您的建议!

答案 2 :(得分:0)

在您的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 ); 
}