Почему ajax success возвращает 0?

Вот так выглядит запрос:

    $('.send-theme').on('click', function(e){
        e.preventDefault();


        let dataValues = {
            'title' : $('.input-title').val(),
            'descr' : $('.y-story').val(),
        };

        if( dataValues.title != '' && dataValues.descr != '' ) {



            $.ajax({
                url: '/wp-admin/admin-ajax.php',
                type: 'POST',
                data: {
                    'action' : 'add_post_to_base',
                    'title' : dataValues.title,
                    'descr' : dataValues.descr,
                }, // можно также передать в виде массива или объекта

                beforeSend: function( xhr ) {
                     $('.add_post').removeClass('add_post--active');  
                },

                success: function( data ) {

                    alert (data);
                }
            });
            // если элемент – ссылка, то не забываем:
                return false;

        }
    }); 

Его обработчик в functions.php

function add_post_to_base(){
    $title =  $_POST['title'];
    $descr = $_POST['descr'];
}

add_action( 'wp_ajax_nopriv_add_post_to_base', 'add_post_to_base' );
add_action( 'wp_ajax_add_post_to_base', 'add_post_to_base' );

И сама форма :

<form action="<?php echo home_url( '/' ) ?>" method="post" class="add_post">

Ответы (1 шт):

Автор решения: Neolot

Функция add_post_to_base() ничего не возвращает, поэтому ответ 0. Эта функция должна возвращать какой-то ответ, причем ответ обязательно должен завершаться функцией die() либо должен быть обернут в функцию die();

Вот как должен выглядеть рабочий вариант:

function add_post_to_base(){
    $title =  $_POST['title'];
    $descr = $_POST['descr'];
    die('Success!');
}

add_action( 'wp_ajax_nopriv_add_post_to_base', 'add_post_to_base' );
add_action( 'wp_ajax_add_post_to_base', 'add_post_to_base' );

В результате запроса у вас в окне появится сообщение "Success!".

→ Ссылка