管理员ajax请求使用die()返回0


10

所以我在管理区域中将这种配置用于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网址,而不会出现404错误。
问题是什么?


您是否曾经解决过这个问题?如果是这样,您能否评论(或接受)解决您的问题的答案?如果这些方法都不能解决您的问题,并且已经解决,请在下面添加答案?谢谢!
jmort253

@ jmort253嗨,很抱歉现在就回答你,但是目前,我仍然有这个问题,我在网上找不到任何解决方案: ,我将在这里写;)
伊万诺·莫西里

好的,这里也是。如果我知道了,我会发布。:) 保持联系。
jmort253

1
我解决了我的问题,wp_ajax_my_action“ my_action”部分的后缀必须与jQuery帖子中使用的操作匹配。我看到您的匹配,所以这不是您的问题。我也可以在管理页面上使用它,这就是您要尝试执行的操作。尝试进行此Ajax调用时您已登录吗?还是您注销了?
jmort253

对。没注意到!;)
Rutwick Gangurde 2012年

Answers:


21

还要添加此内容:add_action('wp_ajax_nopriv_my_action', 'my_action_callback');。请注意nopriv

它将解决您的问题!


2
我通过确保后缀“ wp_ajax_SUFFIX”与操作匹配来解决此问题,因此jQuery帖子中的操作也为“ SUFFIX”。但是,我不需要使用nopriv ...不确定这是否是op问题的答案,因为这是在管理页面上发生的操作,这几乎意味着您已登录,这表明您不需要注册nopriv处理程序...
jmort253

15

我有同样的问题。解:

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

如果您不同时添加(使用nopriv和不使用nopriv),则它将仅在登录模式或退出模式下工作。nopriv用于退出,另一个用于登录。


4

不知道这是否是您的问题,但是我得到的响应仅为“ 0”,这花费了我最长的时间才能解决。除了确保你把exit或者die在你的PHP函数结束时,我发现,你必须把你的add_action('wp_ajax_...位在你的插件的顶层。我把它套在admin_menu钩子里,这没用。我不确定您上面的代码是否是顶级插件php文件中的函数内部包含的一部分(就像我的一样)。


1
这里是同样的问题。不确定如何解决这种问题,因为有时我们需要将ajax响应放在代码的内部或结尾。
阿里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.