Ajax запрос возвращает полный код страницы

23 авг. 2013 г., 16:58:55
Просмотры: 22.6K
Голосов: 3

У меня возникла небольшая проблема с ajax вызовом на сайте, который я недавно начал поддерживать.

Я использовал похожие вызовы раньше на других сайтах, поэтому не уверен, связано ли это с ограничением плагина или конфликтом, но буду рад любым идеям!

Вызов возвращает полное содержимое страницы вместо содержимого id поста, которое я ожидал получить. Я добавил alert в js перед ajax вызовом, и переменная "thisPost" установлена правильно. Я пробовал различные методы, но ни один не позволяет мне вернуть post_id как json объект. В итоге возвращаемое значение будет json объектом с большим количеством деталей, чем просто post_id, но я упростил код, пока не заработает.

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>Информация о работе 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='#'>Ссылка на PDF будет добавлена</a>";
                // открыть приветственное сообщение, как только загрузится окно
                Shadowbox.open({
                    content:    contents.concat(pdf_button),
                    player:     "html",
                    title:      "Детали события",
                    height:     600,
                    width:      500
                });
            }
        });
    });
});
2
Комментарии

Что именно возвращает страница? Что вы имеете в виду под "полным кодом страницы"? Сам callback должен возвращать строковый литерал — "post_id". Пожалуйста, [отредактируйте] ваш код в вопросе. Вопрос не должен зависеть от стороннего сайта.

s_ha_dum s_ha_dum
23 авг. 2013 г. 17:15:29

Ответ callback возвращает полный HTML страницы, на которой он вызывается, всё от открывающего <!DOCTYPE HTML> до закрывающего тега. Я сейчас отредактирую вопрос, чтобы включить код. edit: спасибо, что сделали это, опередили меня! Также я знаю, что сейчас возвращается строка, это было просто для тестирования, чтобы проверить, действительно ли возвращаемое значение обрабатывается, но похоже, что нет.

iamdannywilson iamdannywilson
23 авг. 2013 г. 17:56:27
Все ответы на вопрос 1
3

Моя проблема была проста:

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

Должно было быть:

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

Проблема решена... извините

26 авг. 2013 г. 13:59:03
Комментарии

Я прочитал это и подумал: "Нет, я назвал правильно". Через 2 часа я всё ещё не мог понять свою ошибку и вернулся к этому... Оказалось, я написал ajaxurl вместо ajaxUrl. Ох уж...

mread1208 mread1208
7 авг. 2016 г. 06:54:24

Лол, да... годы спустя... Я использовал this.ajaxURL в контексте, где this не существовало.

Timothy Fisher Timothy Fisher
25 июн. 2019 г. 05:28:04

Я также столкнулся с такой же проблемой, когда id моей формы не был корректно заключён в кавычки " "... начальная кавычка отсутствовала, и форма не отправлялась! Действительно, в таком случае "ajax" возвращает код самой начальной страницы :-/

St3an St3an
18 дек. 2020 г. 17:25:38