Запрос WordPress Ajax возвращает 0

Я не могу понять, почему ничего не возвращается. Я настоящий новичок в Ajax. Я только что прочитал много тем об использовании Ajax в Woprdpress, но примеры для меня очень сложные. Вот мой код JS combo_checkout_iRange.js

jQuery(document).ready(function() {
    jQuery('#loader').hide();
    jQuery('#check-out-date').hide();
    jQuery('#check-in-date').change(function(){
        jQuery('#check-out-date').fadeOut();
        jQuery('#loader').show();
        jQuery.ajax({
            type: 'POST',
            url:myAjax.ajaxurl, 
            data: {
                action : 'my_ajax_handler',
                parent_id: jQuery("#check-in-date").val()
            },
            success: function(data){
                alert(data);
                jQuery('#loader').hide();
                jQuery('#check-out-date').show();
                jQuery('#check-out-date').append(data);
            }});
            return false;
        });
        jQuery('#check-out-date').change(function(){
            alert(jQuery('#check-out-date').val());
        });
    });

Вот что я написал function.php

Примечание. это должно работать в сообщениях типа "встречи".

add_action("wp_enqueue_scripts", function() {

     if (is_single()) {
        if (get_post_type() == 'meetings')
        {
            wp_enqueue_script('combo_checkout_iRange', get_template_directory_uri() . '/js/combo_checkout_iRange.js', array( 'jquery' ), '1.0' ,true);

            $data_array = array(
                'ajaxurl' => admin_url( 'admin-ajax.php' )
            );

            wp_register_script( 'combo_checkout_iRange', get_template_directory_uri() . '/js/combo_checkout_iRange.js', array('jquery') );
            wp_localize_script( 'combo_checkout_iRange', 'myAjax', $data_array );



        }
    }
});

и это мой обработчик ajax, который я поместил внутрь single_meetings.php

add_action("wp_ajax_my_ajax_handler", "my_ajax_handler");
add_action("wp_ajax_nopriv_my_ajax_handler", "my_ajax_handler");

function my_ajax_handler() {
                if ( isset($_REQUEST["parent_id"]) ) {
                     $id    = $_REQUEST["parent_id"];
                     return $id;
                     die();
                 }
             }

person Mina Ragaie    schedule 20.03.2015    source источник
comment
Пробовали ли вы проверить сетевую панель в консоли браузера, чтобы убедиться, что ваши данные from включены в ваш https://developer.chrome.com/devtools/docs/network#http-headers?   -  person Michael Doye    schedule 21.03.2015


Ответы (1)


Вы не можете использовать return в обратном вызове AJAX. Код никогда не доходит до die в строке ниже. Вместо этого вам нужно повторить значение, а затем использовать wp_die().

Заменять:

return $id;
die();

С участием:

echo $id;
wp_die();
person Nathan Dawson    schedule 20.03.2015
comment
Убедитесь, что обратный вызов работает правильно, чтобы его можно было исключить. Измените echo $id; на echo 5;. - person Nathan Dawson; 20.03.2015
comment
Кажется, это не работает так, как должно. После редактирования echo $id` на echo 5;` ничего не изменилось, но я не знаю, почему - person Mina Ragaie; 20.03.2015
comment
спасибо, вы просто объявляете причину;) теперь все работает нормально :) - person Mina Ragaie; 21.03.2015
comment
Как сказал @Nathan, моя проблема заключалась в расположении обработчика Ajax, поэтому обратный вызов не ответил - person Mina Ragaie; 22.03.2015