web-dev-qa-db-fra.com

La fonction Ajax renvoie -1

J'ai une question.

J'ai créé une fonction simplement ajax. Quand je suis connecté, cela fonctionne parfaitement. Quand je suis déconnecté, il me renvoie -1 (depuis Wordpress 3.1)

Pourquoi ? Je ne comprends pas. Justement, il renvoie -1 et tout mon code HTML. (lol) Je vais être fou à nouveau.

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

Toute aide, s'il vous plaît? Merci.

1
Steffi

Je l'ai trouvé

J'avais fait une redirection, donc mon statut de fonction ajax était 302 ... J'ai supprimé la redirection et cela a fonctionné!

Merci les gars.

1
Steffi

Rarst a déclaré que cela fonctionnait pour lui, qu'il soit connecté ou déconnecté. Je peux également confirmer la même chose. Voici mon code de test laid qui fonctionne, très simplement une version piratée de votre code (pour les tests).

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
}

A travaillé à la fois déconnecté et connecté (évidemment pas dans admin déconnecté, car il n'y a pas d'administrateur déconnecté).

En réalité, je n'utiliserais pas les crochets de manière aussi médiocre dans le code réel. Ne vous fiez donc pas à ma version hacky de votre code pour montrer comment faire les choses, car ce n'est pas le cas. ).

2
t31os