función AJAX que devuelve -1

4

Recientemente desarrollé un pequeño complemento para mi sitio, que usa AJAX, y ahora estoy tratando de implementar las mismas técnicas de AJAX para las mismas plantillas del sitio, pero como resultado obtengo -1 , aquí está mi 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);
            });
    });
});

Estoy usando Wordpress versión 3.2.1

¿Alguna idea sobre lo que estoy haciendo mal?

    
pregunta Odyss3us 18.07.2011 - 14:21

2 respuestas

3

Estás pasando 'eu_custom_query' como la acción en tu AJAX. Debe ser 'custom_query'.

Usted decide el nombre de la acción, cuando agrega la acción, es decir, 'wp_ajax_my_action' se llamaría 'my_action'

Lo estás confundiendo con el método de devolución de llamada. Espero que tenga sentido.

p.s. para arreglar su cambio de código:

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

a:

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

Veo dos problemas:

noConflicto

WordPress no requiere envoltorios de Conflicto para jQuery . Así que esto:

$(document).ready(function(){

... tiene que ser esto:

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

... para que $ funcione correctamente dentro de la función.

Reemplazo completo de la secuencia de comandos incluida en el núcleo

Además, está reemplazando a la perfección el jQuery integrado en el núcleo, que nunca debe hacer , o corre el riesgo de romper cosas en el backend WP-Admin.

Cualquier código de este tipo debe incluirse dentro de un if ( ! is_admin() ) condicional:

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

Lea otras preguntas en las etiquetas