Запит адміністратора 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, «моя керованість», повинен відповідати дії, що використовується в публікації jQuery. Я бачу, що ваші збіги, тож це не проблема у вашому випадку. У мене це також працює на сторінці адміністратора, і це те, що ви намагаєтеся зробити. Ви ввійшли в систему, намагаючись здійснити цей виклик Ajax? Або ви вийшли з системи?
jmort253

Правильно. Не помічав цього! ;)
Рутвік Гангурде

Відповіді:


21

Додайте це так: add_action('wp_ajax_nopriv_my_action', 'my_action_callback');. Зауважте nopriv.

Це вирішить вашу проблему!


2
Я вирішив це, переконавшись, що суфікс "wp_ajax_SUFFIX" відповідає дійству, так що дія в публікації jQuery також була "SUFFIX". Однак мені не потрібно було використовувати 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 всередину або в кінці частини кодів.
Арі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.