Ajax запрос в админке возвращает 0 при использовании die()

15 мар. 2012 г., 18:40:41
Просмотры: 21.4K
Голосов: 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("Активировано");
                else
                    jQuery("#errore a#inattivo").attr("id","attivo").html("Активировать сейчас");
            });
        }
    );
});
</script>
<?php }

add_action('wp_ajax_my_action', 'my_action_callback');

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

Это просто тестовый код, но он всегда возвращает 0 вместо строки "attivato". При этом ajax url определяется правильно, без ошибки 404.
В чем проблема?

5
Комментарии

Вам удалось решить эту проблему? Если да, не могли бы вы прокомментировать (или принять) ответ, который помог вам? Если ни один из предложенных вариантов не сработал, но проблема решена, не могли бы вы добавить свой ответ ниже? Спасибо!

jmort253 jmort253
6 июл. 2012 г. 02:51:56

@jmort253 Привет, извини, что отвечаю только сейчас, но на данный момент у меня все еще есть эта проблема, и я не нашел решения в интернете :'( Я работаю над этим в свободное время; если найду решение, обязательно напишу здесь ;)

Ivano Mercuri Ivano Mercuri
6 июл. 2012 г. 09:56:18

Хорошо, у меня то же самое. Если разберусь, напишу. :) Будем на связи.

jmort253 jmort253
6 июл. 2012 г. 10:27:43

Я решил свою проблему, суффикс wp_ajax_my_action, часть "my_action", должен соответствовать действию, используемому в jQuery post. Я вижу, что у вас они совпадают, так что это не проблема в вашем случае. У меня это также работает со страницы админки, что вы и пытаетесь сделать. Вы авторизованы, когда пытаетесь сделать этот ajax-запрос? Или вы вышли из системы?

jmort253 jmort253
6 июл. 2012 г. 19:13:41

Точно. Не заметил этого! ;)

Rutwick Gangurde Rutwick Gangurde
7 июл. 2012 г. 07:44:25
Все ответы на вопрос 3
1
21

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

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

22 июн. 2012 г. 09:00:15
Комментарии

Я исправил это, убедившись, что суффикс "wp_ajax_SUFFIX" соответствует действию, поэтому действие в jQuery post также было "SUFFIX". Однако мне не нужно было использовать nopriv... Не уверен, что это решение проблемы автора, так как это действие происходит на странице админки, что по сути означает, что вы авторизованы, и предполагает, что вам не нужно регистрировать обработчик nopriv...

jmort253 jmort253
6 июл. 2012 г. 19:15:57
0
15

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

// Добавляем обработчик для неавторизованных пользователей
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
// Добавляем обработчик для авторизованных пользователей  
add_action('wp_ajax_my_action', 'my_action_callback');

Если не добавить оба варианта (с nopriv и без), обработчик будет работать только для авторизованных или только для неавторизованных пользователей. nopriv предназначен для неавторизованных пользователей, второй вариант — для авторизованных.

31 июл. 2012 г. 11:40:03
1

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

22 мар. 2012 г. 23:20:20
Комментарии

Та же проблема здесь... Не уверен, как исправить такого рода проблему, поскольку нам иногда нужно помещать ajax-ответ внутрь или в конец кода.

Ari Ari
16 дек. 2013 г. 09:52:38