Função AJAX retornando -1

4

Eu recentemente desenvolvi um pequeno plugin para o meu site, que usa AJAX, e agora estou tentando implementar as mesmas técnicas AJAX para os mesmos templates do site, mas eu continuo recebendo -1 como resultado, aqui está o meu código,

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

Estou usando o Wordpress versão 3.2.1

Alguma idéia do que estou fazendo errado?

    
por Odyss3us 18.07.2011 / 14:21

2 respostas

3

Você está passando "eu_custom_query" como a ação no seu AJAX. Deve ser 'custom_query'.

Você decide o nome da ação ao adicionar a ação, ou seja, "wp_ajax_my_action" seria chamado de "my_action"

Você está confundindo-o com o método de retorno de chamada. Espero que isso faça sentido.

p.s. para corrigir sua alteração de código:

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

para:

add_action('wp_ajax_eu_custom_query', 'eu_custom_query');
add_action('wp_ajax_nopriv_eu_custom_query', 'eu_custom_query');
    
por Cristian 18.07.2011 / 14:25
2

Eu vejo dois problemas:

noConflict

O WordPress não requer wrappers do Conflict para jQuery . Então isso:

$(document).ready(function(){

... precisa ser isso:

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

... para que $ funcione corretamente dentro da função.

Substituição geral do script principal incluído

Além disso, você está substituindo o jQuery principal, que você deve nunca fazer , ou você arriscará quebrar coisas no backend do WP-Admin.

Qualquer código deve ser agrupado em uma condição if ( ! is_admin() ) :

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

Tags