Cererea Ajax returnează codul complet al paginii

23 aug. 2013, 16:58:55
Vizualizări: 22.6K
Voturi: 3

Am o mică problemă cu un apel Ajax pe un site pe care tocmai l-am preluat.

Am mai folosit apeluri similare pe alte site-uri, așa că nu sunt sigur dacă este o restricție sau un conflict cu vreun plugin, dar orice sugestii sunt binevenite!

Apelul returnează conținutul complet al paginii în loc de conținutul ID-ului postării, care este ceea ce mă așteptam. Am adăugat o alertă în JavaScript înainte de apelul Ajax și variabila "thisPost" este setată corect. Am încercat diverse metode diferite, dar niciuna nu pare să-mi permită să returnez post_id ca obiect json. În final, rezultatul va fi un obiect json cu mai multe detalii decât doar post_id, dar l-am simplificat până reușesc să-l fac să funcționeze.

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>Informații Job 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 către PDF va urma</a>";
                // deschide un mesaj de bun venit imediat ce se încarcă fereastra
                Shadowbox.open({
                    content:    contents.concat(pdf_button),
                    player:     "html",
                    title:      "Detalii Eveniment",
                    height:     600,
                    width:      500
                });
            }
        });
    });
});
2
Comentarii

Ce returnează exact pagina? Ce înțelegi prin "codul complet al paginii"? Callback-ul în sine ar trebui să returneze un șir literal-- "post_id". Te rog [editează] codul tău în întrebare. O întrebare nu ar trebui să depindă de un site terț.

s_ha_dum s_ha_dum
23 aug. 2013 17:15:29

Răspunsul callback returnează întregul HTML pentru pagina pe care este apelat, totul de la <!DOCTYPE HTML> până la tag-ul de închidere. Voi edita întrebarea pentru a include codul acum. edit: mulțumesc că ai făcut asta, m-ai întrecut! De asemenea, știu că returnează un șir acum, asta era doar pentru testare pentru a vedea dacă preia într-adevăr valoarea returnată, se pare că nu o face.

iamdannywilson iamdannywilson
23 aug. 2013 17:56:27
Toate răspunsurile la întrebare 1
3

Problema mea era simplă;

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

trebuia să fie:

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

problemă rezolvată... scuze

26 aug. 2013 13:59:03
Comentarii

Am citit asta și m-am gândit, "Nu, l-am numit corect". 2 ore mai târziu și tot nu-mi puteam da seama care era problema, până când am revenit la asta... Am scris ajaxurl în loc de ajaxUrl. Of...

mread1208 mread1208
7 aug. 2016 06:54:24

Haha, da... ani mai târziu... foloseam this.ajaxURL într-un context în care this nu exista.

Timothy Fisher Timothy Fisher
25 iun. 2019 05:28:04

Și eu am întâmpinat aceeași problemă pentru că ID-ul formularului meu nu era bine închis între ghilimele " "... lipsea cel de la început, iar formularul nu a fost trimis! Într-adevăr, atunci codul "ajax" returnat era întreaga pagină inițială :-/

St3an St3an
18 dec. 2020 17:25:38