Admin-ajax 400 и возвращяет 0
-
Написал все как нужно, но всегда возвращяет 400 ошибку. Испробовал все что нужно, но ничего не помогло. Подргужаю посты с помощью кнопки, а при нажатии на кнопку ошибка 400
-
Написал все как нужно
Где можно посмотреть код?
при нажатии на кнопку ошибка 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; ?>
- Ответ изменён 3 года, 1 месяц назад пользователем 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 Это если этот адрес задать для отправки аяксом данных
- Ответ изменён 3 года, 1 месяц назад пользователем 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
- Ответ изменён 3 года, 1 месяц назад пользователем Юрій.
Большое спасибо, все работает!
- Тема «Admin-ajax 400 и возвращяет 0» закрыта для новых ответов.