La richiesta Ajax restituisce il codice completo della pagina

23 ago 2013, 16:58:55
Visualizzazioni: 22.6K
Voti: 3

Ho un problema con una chiamata Ajax su un sito che ho appena preso in gestione.

Ho utilizzato chiamate simili su altri siti quindi non sono sicuro se sia una restrizione dei plugin o un conflitto, ma ogni suggerimento è benvenuto!

La chiamata sta restituendo il contenuto completo della pagina invece del contenuto dell'ID del post che mi aspettavo. Ho aggiunto un alert al js prima della chiamata ajax e la variabile "thisPost" è impostata correttamente. Ho provato diversi metodi ma nessuno sembra permettermi di restituire il post_id come oggetto json. Alla fine il risultato sarà un oggetto json con più dettagli oltre al post_id ma l'ho semplificato finché non riesco a farlo funzionare.

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";
    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>Informazioni sul Lavoro 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='#'>Link al PDF da seguire</a>";
                // apre un messaggio di benvenuto non appena la finestra si carica
                Shadowbox.open({
                    content:    contents.concat(pdf_button),
                    player:     "html",
                    title:      "Dettagli Evento",
                    height:     600,
                    width:      500
                });
            }
        });
    });
});
2
Commenti

Cosa restituisce esattamente la pagina? Cosa intendi con "il codice completo della pagina"? La callback stessa dovrebbe restituire un letterale stringa-- "post_id". Per favore [modifica] il tuo codice nella domanda. Una domanda non dovrebbe dipendere da un sito di terze parti.

s_ha_dum s_ha_dum
23 ago 2013 17:15:29

La risposta della callback sta restituendo l'html completo per la pagina su cui viene chiamata, tutto dall'apertura <!DOCTYPE HTML> al tag di chiusura. Modificherò la domanda per includere il codice ora. modifica: grazie per averlo fatto, mi hai battuto sul tempo! Inoltre so che al momento restituisce una stringa, questo era solo per testare se stava effettivamente raccogliendo il valore restituito, a quanto pare non lo è.

iamdannywilson iamdannywilson
23 ago 2013 17:56:27
Tutte le risposte alla domanda 1
3

Il mio problema era semplice;

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

doveva essere:

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

problema risolto... scusate

26 ago 2013 13:59:03
Commenti

Ho letto questo e ho pensato tra me e me, "No, l'ho chiamato correttamente". 2 ore dopo e ancora non riuscivo a capire il problema, poi sono tornato su questo... avevo scritto ajaxurl invece di ajaxUrl. Ugh....

mread1208 mread1208
7 ago 2016 06:54:24

Lol sì... anni dopo... stavo usando this.ajaxURL in un contesto dove this non esisteva.

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

Anche io ho incontrato lo stesso problema perché l'id del mio form non era ben racchiuso tra " "... mancava quello iniziale, e il form non veniva riconosciuto! Infatti in quel caso, il codice di ritorno "ajax" era l'intera pagina iniziale :-/

St3an St3an
18 dic 2020 17:25:38