web-dev-qa-db-ja.com

管理AJAXリクエストがdie()で返される

だから私は管理領域の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();
}

これは単なるテストコードですが、文字列 "attivato"の代わりに常に0を返します。それはまた404エラーなしで、正しいAjax URLを見つけます。
何が問題ですか?

10
Ivano Mercuri

これも追加してください:add_action('wp_ajax_nopriv_my_action', 'my_action_callback');noprivに注目してください。

それはあなたの問題を解決します!

21

私は同じ問題を抱えていました。溶液:

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

両方(noprivの有無にかかわらず)を追加しない場合は、サインインモードまたはサインアウトモードでのみ機能します。 noprivはサインアウト用、もう1つはサインイン用です。

15
Paul

これがあなたの問題であるかどうかわからないが、私はちょうど "0"の応答を得ていたので、それを把握するのに最長の時間がかかった。あなたのphp関数の最後にexitまたはdieを入れるようにすることとは別に、あなたはあなたのプラグインのトップレベルにあなたのadd_action('wp_ajax_...ビットを置かなければならないことがわかりました。 admin_menuフックの中に入れ子にしましたが、うまくいきませんでした。上記のコードがトップレベルのプラグインphpファイルの関数内のインクルードの一部であるかどうかはわかりません(私のように)。

4
Jeff