fonction AJAX retournant -1

4

J'ai récemment développé un petit plugin pour mon site, qui utilise AJAX, et maintenant j'essaie d'implémenter les mêmes techniques AJAX pour les modèles du même site, mais je continue à obtenir -1 comme résultat, voici mon code,

functions.php:

    //Front end AJAX functions

    function eu_custom_query(){
        global $post;
        global $wpdb;

        echo "yo";

        die();
    }

function enque_template_scripts() {

    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', 'http://code.jquery.com/jquery-1.6.2.js');
    wp_enqueue_script( 'jquery' );


    // embed the javascript file that makes the AJAX request
    wp_register_script( 'scripts.js', get_bloginfo('template_directory').'/scripts/scripts.js');
    wp_enqueue_script( 'scripts.js' );

    // declare the URL to the file that handles the AJAX request (wp-admin/admin-ajax.php)
    wp_localize_script( 'scripts.js', 'wp_ajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); 

}    


    add_action('wp_ajax_custom_query', 'eu_custom_query');
    add_action('wp_ajax_nopriv_custom_query', 'eu_custom_query');
    add_action('get_header', 'enque_template_scripts');

scripts.js:

$(document).ready(function(){
    $("#do_ajax").click(function(){
            $.post(wp_ajax.ajaxurl, { action: 'eu_custom_query' }, function(data){
                alert(data);
            });
    });
});

J'utilise Wordpress version 3.2.1

Avez-vous des idées sur ce que je fais mal?

    
posée Odyss3us 18.07.2011 - 14:21

2 réponses

3

Vous passez 'eu_custom_query' comme action dans votre AJAX. Ce devrait être 'custom_query'.

Vous décidez du nom de l'action lorsque vous ajoutez l'action, c'est-à-dire que "wp_ajax_my_action" s'appelle "mon_action"

Vous confondez cela avec la méthode de rappel. J'espère que cela a du sens.

p.s. pour corriger votre changement de code:

add_action('wp_ajax_custom_query', 'eu_custom_query');
add_action('wp_ajax_nopriv_custom_query', 'eu_custom_query');

à:

add_action('wp_ajax_eu_custom_query', 'eu_custom_query');
add_action('wp_ajax_nopriv_eu_custom_query', 'eu_custom_query');
    
réponse donnée Cristian 18.07.2011 - 14:25
2

Je vois deux problèmes:

noConflict

WordPress nécessite l'utilisation d'encapsuleurs noConflict pour jQuery . Donc ceci:

$(document).ready(function(){

... doit être ceci:

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

... afin que $ fonctionne correctement dans la fonction.

Remplacement général du script fourni avec le noyau

De plus, vous remplacez nudement le jQuery fourni avec le noyau, ce que vous ne devriez jamais faire , sinon vous risqueriez de casser des choses dans le backend de WP-Admin.

Tout code de ce type doit être placé à l'intérieur d'un if ( ! is_admin() ) conditionnel:

if ( ! is_admin() ) {
    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', 'http://code.jquery.com/jquery-1.6.2.js');
    wp_enqueue_script( 'jquery' );
}
    
réponse donnée Chip Bennett 18.07.2011 - 14:32

Lire d'autres questions sur les étiquettes