Запрос администратора ajax возвращает 0 с помощью die ()

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». Он также находит URL-адрес ajax правильно, без ошибки 404.
В чем проблема?

Ивано Меркури
источник
Вы когда-нибудь понимали эту проблему? Если да, то можете ли вы прокомментировать (или принять) ответ, который решил вашу проблему? Если ни один из них не решил вашу проблему, и она решена , не могли бы вы добавить ответ ниже? Спасибо!
jmort253
@ jmort253 Привет, извините, что отвечаю вам прямо сейчас, но на данный момент у меня все еще есть эта проблема, и я не нашел решения по сети: '(Я работаю над этим, когда у меня есть свободное время; если я найду решение я напишу здесь;)
Ивано Меркури
Хорошо, то же самое здесь. Если я это выясню, я отправлю. :) Поддерживать связь.
jmort253
1
Я решил свою проблему, суффикс части wp_ajax_my_action"my_action" должен соответствовать действию, используемому в посте jQuery. Я вижу, что ваш совпадает, так что это не проблема в вашем случае. У меня также это работает со страницы администратора, что вы пытаетесь сделать. Вы вошли в систему при попытке сделать этот вызов ajax? Или вы вышли из системы?
jmort253
Правильно. Не заметил этого! ;)
Рутвик Гангурде

Ответы:

21

Добавьте это так: add_action('wp_ajax_nopriv_my_action', 'my_action_callback');. Обратите внимание nopriv.

Это решит вашу проблему!

Рутвик Гангурде
источник
2
Я исправил это, убедившись, что суффикс «wp_ajax_SUFFIX» соответствует действию, поэтому действие в посте jQuery также было «SUFFIX». Тем не менее, мне не нужно было использовать nopriv ... Не уверен, что это ответ на проблему оп, так как это действие, которое происходит на странице администратора, что в значительной степени означает, что вы вошли в систему, которая предлагает вам не нужно регистрировать обработчик nopriv ...
jmort253
15

У меня такая же проблема. Решение:

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

Если вы не добавите оба (с nopriv и без него), он будет работать либо в режиме входа, либо в режиме выхода. nopriv для выхода, другой для входа.

Павел
источник
4

Не уверен, что это ваша проблема, но я получил ответ «0», и мне потребовалось самое большое время, чтобы понять это. Кроме того, чтобы убедиться, что вы поставили exitили dieв конце своей функции PHP, я обнаружил, что вы должны поставить свой add_action('wp_ajax_...бит на верхнем уровне вашего плагина. У меня это было вложено в мой admin_menuкрючок, который не работал. Я не уверен, является ли ваш код выше частью включения внутри функции из вашего php-файла плагина верхнего уровня (как у меня было).

Джефф
источник
1
Та же самая проблема здесь .. Не уверен, как решить эту проблему, так как нам иногда нужно поместить ответ ajax внутри или в конце кода.
Ари