web-dev-qa-db-ja.com

Ajax関数が-1を返す

質問があります。

単純なajax関数を作りました。私がログインしたとき、それは完璧に機能します。ログアウトすると-1が返されます(Wordpress 3.1以降)。

どうして ?わかりません。正確には、-1と私のHTMLコード全体を返します。 (笑)またクレイジーになるつもりです。

PHP(functions.php内)

function say_coucou(){
check_ajax_referer( 'hello', 'nonce' );
echo "Hello";
die(); // this is required to return a proper result
exit;
}
add_action('wp_ajax_hello_hello', 'say_coucou');
add_action('wp_ajax_nopriv_hello_hello', 'say_coucou');

*JAVASCRIPT/JQUERY/AJAX(footer.php内)*

function blabla(){
    var toSend = {
      action:"hello_hello",
      post_id: "<?php echo $wp_query->post->ID; ?>",
      nonce: "<?php echo js_escape( wp_create_nonce('hello')); ?>"
    };
    url_action = 'http://www.***********/wp-admin/admin-ajax.php';
    $.ajaxSetup({cache:true});
    $.ajax({
      url: url_action,
      type:'POST',
      data: toSend,
      cache: false,
      success:function(results)
      {
        alert(results)
      }
     });
 } 

何か助けてください。ありがとう。

1
Steffi

それが見つかりました!

私はリダイレクトをしたので、私のajax関数のステータスは302でした。

みんなありがとう。

1
Steffi

Rarst氏は、ログインとログアウトの両方で彼のためにうまくいった、私も同じことを確認することができる、これはうまくいく私の醜いテストコードです、あなたのコードのほんの少しハックされたバージョンです。

function say_coucou(){
    check_ajax_referer( 'hello', 'nonce' );
    echo "Hello";
    die;
}
add_action('wp_ajax_hello_hello', 'say_coucou');
add_action('wp_ajax_nopriv_hello_hello', 'say_coucou');
add_action('admin_print_footer_scripts','blabla',20000);
add_action('wp_head','enj',20000);
add_action('wp_footer','blabla',20000);
function enj() {
    wp_enqueue_script('jquery');
}

function blabla(){
?>
<script type="text/javascript">

    jQuery(document).ready(function($){

        $('a#blabla').click(function(){

            var toSend = {
                action:"hello_hello",
                post_id: "1",
                nonce: "<?php echo esc_js( wp_create_nonce('hello') ); ?>"
            };
            url_action = "<?php echo admin_url('/admin-ajax.php'); ?>";
            $.ajaxSetup({cache:true});
            $.ajax({
                url: url_action,
                type:'POST',
                data: toSend,
                cache: false,
                success:function(results) {
                    alert(results)
                }
            });
        });
    });

</script>
    <a href="#" id="blabla">aaa</a>
    <?php
}

ログアウトとログインの両方で動作しました(管理者がログアウトしていないため、明らかに管理者ログアウトはしていません)。

現実的には実際のコード形式ではあまりフックを使用しません。それで、私のハックバージョンのコードを物事のやり方の良い例として考えてはいけません。 ).

2
t31os