Petición Ajax devolviendo el código completo de la página

23 ago 2013, 16:58:55
Vistas: 22.6K
Votos: 3

Estoy teniendo un pequeño problema con una llamada ajax en un sitio del que acabo de hacerme cargo.

He usado llamadas similares antes en otros sitios así que no estoy seguro si es una restricción o conflicto con algún plugin, ¡pero cualquier idea es bienvenida!

La llamada está devolviendo el contenido completo de la página en lugar del contenido del ID del post que es lo que esperaba. He agregado una alerta al js antes de la llamada ajax y la variable "thisPost" está configurada correctamente. He probado varios métodos diferentes pero ninguno parece permitirme devolver el post_id como un objeto json. Al final la respuesta será un objeto json con más detalles que solo el post_id pero lo he simplificado hasta hacerlo funcionar.

functions.php

function add_calendar_scripts(){
    if (is_page_template('template-eventsplanner.php') ) {
        wp_register_script('calendar', ( get_bloginfo('template_url') . '/js/calendar.js'), array ('jquery'));
        wp_enqueue_script('calendar');
        wp_localize_script( 'calendar', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
    }
}

add_action('wp_head', 'add_calendar_scripts');

function get_full_event_callback(){
    global $wpdb;
    $response = array();
    $post_id = intval($_POST['posted']);
    $response[] = array('id'=>$post_id);
    $result = json_encode($response);
    echo "post_id"; // Aquí solo devolvemos texto plano
    die();
}
add_action( 'wp_ajax_nopriv_get_full_event', 'get_full_event_callback' );
add_action( 'wp_ajax_get_full_event', 'get_full_event_callback' );

calendar.js

jQuery(document).ready(function() {
    var container = jQuery('body'),
        scrollTo = jQuery('.today');
    container.animate({
        scrollTop: scrollTo.offset().top - container.offset().top + container.scrollTop() - 120
    });
    Shadowbox.init({
        skipSetup: true
    });
    jQuery('.event_box').click( function(){
        var pretext = "<h1>Información del Trabajo de Davis Track Hire</h1>";
        var thisPost= jQuery(this).data("event");
        var contents, pdf_button;
        var data = {
            action: 'get_full_event',
            dataType: 'json',
            posted: thisPost,
        };
        jQuery.post(MyAjax.ajax_url, data, function(response) {
            if(response!=0){            
                contents = pretext.concat(response);
                pdf_button = "<a href='#'>Enlace al PDF a continuación</a>";
                // abrir un mensaje de bienvenida tan pronto como se cargue la ventana
                Shadowbox.open({
                    content:    contents.concat(pdf_button),
                    player:     "html",
                    title:      "Detalles del Evento",
                    height:     600,
                    width:      500
                });
            }
        });
    });
});
2
Comentarios

¿Qué es exactamente lo que devuelve la página? ¿Qué quieres decir con "el código completo de la página"? El callback en sí debería devolver un string literal-- "post_id". Por favor, [edita] tu código en la pregunta. Una pregunta no debería depender de un sitio de terceros.

s_ha_dum s_ha_dum
23 ago 2013 17:15:29

La respuesta del callback está devolviendo el HTML completo de la página en la que se llama, todo desde la etiqueta de apertura <!DOCTYPE HTML> hasta la etiqueta de cierre. Voy a editar la pregunta para incluir el código ahora. editar: ¡gracias por hacerlo, me ganaste de mano! También sé que actualmente está devolviendo un string, esto era solo para probar si estaba captando el valor devuelto, parece que no lo está haciendo.

iamdannywilson iamdannywilson
23 ago 2013 17:56:27
Todas las respuestas a la pregunta 1
3

Mi problema era simple;

jQuery.post(MyAjax.**ajax_url**, data, function(response) {

debía ser:

jQuery.post(MyAjax.**ajaxurl**, data, function(response) {

problema resuelto... disculpas

26 ago 2013 13:59:03
Comentarios

Leí esto y pensé: "No, lo nombré correctamente". 2 horas después y aún no podía resolver mi problema, volví a esto... Había escrito ajaxurl en lugar de ajaxUrl. Ugh...

mread1208 mread1208
7 ago 2016 06:54:24

Jaja sí... años después... estaba usando this.ajaxURL en un contexto donde this no existía.

Timothy Fisher Timothy Fisher
25 jun 2019 05:28:04

También me encontré con el mismo problema porque el id de mi formulario no estaba bien encerrado entre comillas ""... faltaba la comilla inicial, ¡y el formulario no era alcanzado! Efectivamente, entonces el código de retorno "ajax" era la página completa inicial :-/

St3an St3an
18 dic 2020 17:25:38