Поддержка Проблемы и решения Admin-ajax 400 и возвращяет 0

  • Написал все как нужно, но всегда возвращяет 400 ошибку. Испробовал все что нужно, но ничего не помогло. Подргужаю посты с помощью кнопки, а при нажатии на кнопку ошибка 400

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Написал все как нужно

    Где можно посмотреть код?

    при нажатии на кнопку ошибка 400

    Предполагаю, что не передаётся параметр action. Либо передаётся, но такое значение не зарегистрировано с помощью действий wp_ajax_{$action} или wp_ajax_nopriv_{$action}.

    Здравствуйте, вот мои коды:

    Это в functions.php:

    function loadmore_get_posts(){
    		$args = unserialize(stripslashes($_POST['query']));
    		$args['paged'] = $_POST['page'] + 1; // следующая страница
    		$args['post_status'] = 'publish';
    	 
    		query_posts($args);
    		// если посты есть
    		if(have_posts()) :
    			while(have_posts()): the_post();    
    			the_post();?>
    			<h2><?php the_title();?></h2>
    			<?php the_content();?>
    			
    			<?php
    			//get_template_part('content-template');
    			
    			endwhile;
    		endif;
    		die();
    	}
    	 
    	add_action('wp_ajax_loadmore', 'loadmore_get_posts');
    	add_action('wp_ajax_nopriv_loadmore', 'loadmore_get_posts');

    Это в js-скрипте:

    
    const loadMoreBtn = document.querySelector('#loadmore');
    
    window.addEventListener('load', function () {
        loadMoreBtn.addEventListener('click', function () {
            const customAction = 'loadmore';
            const sendType = 'POST';
    
            const postData = {
                action: customAction,
                query: post_data,
                page: current_page,
            }
    
            const xhr = new XMLHttpRequest();
    
            xhr.open(sendType, ajaxurl);
    
            xhr.addEventListener('success', function () {
                console.log('1');
            })
    
            xhr.send(postData);
        })
    })
    

    Это на нужной мне странице, где и выводятся посты:

    
    <script>
                                        const ajaxurl = '<?php echo admin_url('admin-ajax.php') ?>';
                                        const current_page = <?php echo $paged ?>;
                                        const max_pages = <?php echo $custom_query->max_num_pages ?>;
                                        const post_data = '<?php echo serialize($custom_query->query_vars); ?>';
                                    </script>
    
                                    <?php if ($custom_query->max_num_pages > 1 ) : ?>
                                        <button id="loadmore" class="btn">Load More</button>
                                    <?php endif; ?>
    • Ответ изменён 1 месяц, 3 недели назад пользователем avearthasz.

    Код немного был переделан, ибо данные отправлялись неккоректно с помощью метода serialize, я сделал через json_encode

                                        
    const post_data = <?php echo json_encode($custom_query->query_vars); ?>;
    

    Через обработчик js я отправляю в виде json

    
    xhr.send(JSON.stringify(postData));
    

    Все данные отправляются как нужно, но я нашел проблему. Функция которая должна обрабатывать запрос (которая находится в functions.php) попросту не работает. Там нельзя сделать дебагинг (var_dump, echo) да вообще все не работает.

    Там нельзя сделать дебагинг (var_dump, echo)

    Почему это нельзя? Отлично всё возвращается в браузер. Если, конечно, хук сработал.

    У меня почему-то эта функция игнорируется. Но, если написать /wp-admin/admin-ajax.php?action=loadmore то все возвращает (в чем может быть проблема?)

    P.S Это если этот адрес задать для отправки аяксом данных

    • Ответ изменён 1 месяц, 3 недели назад пользователем avearthasz.

    XMLHttpRequest последний раз использовал уже не помню сколько лет назад, вот чуть ли не еще до появления jquery, поэтому не уверен, но мне кажется, что postData в запрос в Вашем коде не передается. Или передается как-то неправильно.

    Вот что отправляется

    Вроде все правильно

    Вроде все правильно

    Не уверен. Данные формы в тельце POST выглядят так же, как и в uri у GET:
    action=loadmore&page=1&query=….

    Попробуйте формировать body с использованием postData = new FormData() и postData.append().

    https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects

    • Ответ изменён 1 месяц, 3 недели назад пользователем Юрий.

    Большое спасибо, все работает!

Просмотр 9 ответов — с 1 по 9 (всего 9)