admin ajaxリクエストがdie()で0を返す


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();
}

これは単なるテストコードですが、文字列 "attivato"ではなく、常に0を返します。また、404エラーなしでajax urlを正しく検出します。
何が問題ですか?


この問題を理解したことはありますか?もしそうなら、あなたの問題を解決した答えをコメント(または受け入れ)できますか?これらのどれもあなたの問題を解決せず、それが解決された場合、以下に回答を追加していただけませんか?ありがとうございました!
jmort253

@ jmort253こんにちは、今お答えできなくて申し訳ありませんが、現時点ではまだこの問題があり、ウェブ上で解決策が見つかりませんでした、私はここに書こう;)
Ivano Mercuri '07

はい、こちらも同じです。わかったら投稿します。:) 連絡を取り合う。
jmort253 2012

1
私は問題を解決しましwp_ajax_my_actionた。「my_action」部分のサフィックスは、jQuery投稿で使用されるアクションと一致する必要があります。私はあなたのものが一致しているのを見るので、それはあなたの場合の問題ではありません。私はそれをあなたがやろうとしていることである管理ページからも機能させています。このajax呼び出しを行うときにログインしていますか?またはログアウトしていますか?
jmort253 2012

正しい。気づかなかった!;)
Rutwick Gangurde

回答:


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はサインアウト用、もう1つはサインイン用です。


4

これがあなたの問題かどうかはわかりませんが、「0」だけの応答があり、それを理解するのに最も長い時間がかかりました。PHP関数の最後に置くexitかどうかを確認することは別にして、プラグインの最上位にビットdieを置く必要があることがわかりましたadd_action('wp_ajax_...admin_menuフック内に入れ子にしましたが、機能しませんでした。上記のコードがトップレベルのプラグインphpファイルの関数内のインクルードの一部であるかどうかはわかりません(私のように)。


1
同じ問題がここにあります。この種の問題を解決する方法がわからないのは、コードの内部または末尾にajax応答を配置する必要がある場合があるためです。
Ari
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.