問題描述

所以我在管理區域 (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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。