执行AJAX请求总是输出0

时间:2017-05-25 作者:Roman

我正在尝试从我的主题中执行ajax请求header.php 文件我读到我必须使用admin-ajax.php 文件来实现这一点。所以我找了一些例子this

中的我的代码header.php 文件如下所示:

<script>
$(document).ready(function(){
    $(\'.test a\').click(function(){
        var className = $(this).attr(\'class\');

        $.ajax({
            url: "<?php echo admin_url(\'admin-ajax.php\'); ?>",
            data: {
                \'action\': \'myFunc\',
                \'id\': className
            },
            success: function(res){
                alert(res);
            },
            error: function(err){
                alert("Error: " + err);
            }
        });
    });
});
</script>
我的PHP代码如下所示:

function myFunc() {
    echo "hello";
    die();
}

add_action(\'wp_ajax_nopriv_myFunc\', \'myFunc\');
我不确定我应该把这段PHP代码放在哪里。我应该把这个放在我的functions.php 文件或直接发送到admin-ajax.php 文件不管我把PHP代码放在哪里,输出总是0(中的最后一行admin-ajax.phpdie(\'0\')). 还是因为我url 参数

1 个回复
最合适的回答,由SO网友:Johansson 整理而成

您的自定义函数应始终位于主题的functions.php 文件(如果它们不在插件区域内)。绝不应尝试修改wp-content 文件夹(除wp-config.php) 因为它们将被将来的更新覆盖。

现在,有两种方法可以满足您的需求。

1 - Admin-ajax

这个简单的函数将很好地为您提供hello! 作为输出:

add_action(\'wp_ajax_my_ajax_handler\', \'my_ajax_handler\');
add_action(\'wp_ajax_nopriv_my_ajax_handler\', \'my_ajax_handler\');
function my_ajax_handler (){
    _e(\'Hello!\',\'text-domain\');
    exit();
}
现在,尝试访问admin-ajax.php 通过访问wp-admin/admin-ajax.php?action=my_ajax_handler. 这应该适用于已登录和未登录的用户。

2 - REST-API

更简单。看看这个:

add_action( \'rest_api_init\', function () {
    //Path to ajax function
    register_rest_route( \'Roman/v1\', \'/say_hello/\', array(
            \'methods\' => \'GET\', 
            \'callback\' => \'my_hello_function\' 
    ) );
});
还有一个打招呼的函数:

function my_hello_function(){
    return __(\'Hello!\',\'text-domain\');
}
现在,如果您向http://example.com/wp-json/Roman/v1/say_hello/, 作为JSON,您会受到很好的欢迎,如:

{"Hello!"}

可以在jQuery脚本中使用。

结束