问题描述

所以我在管理区域 (like this) 中使用此配置进行 AJAX 调用:

add_action( 'admin_head', 'ajaxPerNgg' );

function ajaxPerNgg(){ ?>
<script type="text/javascript" >
jQuery(document).ready(function() {
    jQuery("#message").remove();
    jQuery("#errore a#attivo").click(
        function(){
            var data = {
                action: 'my_action'
            };
            jQuery.post(ajaxurl, data, function(response) {
                if(response == "attivato")
                    jQuery("#errore a#inattivo").attr("id","completato").html("Attivato");
                else
                    jQuery("#errore a#inattivo").attr("id","attivo").html("Attivalo ora");
            });
        }
    );
});
</script>
<?php }

add_action('wp_ajax_my_action', 'my_action_callback');

function my_action_callback() {
    echo 'attivato';
    die();
}

它只是一个测试代码,但它总是返回 0 而不是字符串”attivato” 。它也正确找到 ajax url,没有 404 错误。问题是什么?

最佳解决方案

添加它:add_action('wp_ajax_nopriv_my_action', 'my_action_callback'); 。注意 nopriv

它会解决你的问题!

次佳解决方案

我有同样的问题。解:

add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
add_action('wp_ajax_my_action', 'my_action_callback');

如果您不添加 (有和没有 nopriv),它将只能在登录模式或注销模式下工作。 nopriv 是登出,另一个是登录。

第三种解决方案

不知道这是否是你的问题,但是我刚刚得到了”0″ 的答复,花了我最长的时间来弄清楚。除了确保将 exitdie 放在 php 函数的末尾,我发现您必须将 add_action('wp_ajax_... 位置于插件的顶层。我把它嵌套在我的 admin_menu 钩子中,这没有工作。我不知道你的代码是否是顶级插件 php 文件中的函数的一部分 (像我的) 。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。