Ajax подгрузка постов работает некорректно.
-
Здравствуйте, появилась страная проблема. На сайте есть пагинация и подгрузка AJAX постов по клику на кнопку. Все работает, данные передаются, никаких ошибок нет (Спасибо большое Юрию). Но, по клику на кнопку происходит следующее:
У меня 11 постов. 10 постов отображается на одной странице и 1 получается на 2-ой. По клику на кнопку происходит бесовщина. Вместо того, чтоб подгрузить последний 11-ый пост, он мне выдает 2, 4, 6, 8 и 1 пост (дублирует).
Вот все мои коды:
const loadMoreBtn = document.querySelector('#loadmore'); const postContainer = document.querySelector('#post-container'); window.addEventListener('load', function () { if (loadMoreBtn) { loadMoreBtn.addEventListener('click', function () { const customAction = 'loadmore'; const sendType = 'POST'; let postData = new FormData(); postData.append('action', customAction); postData.append('query', JSON.stringify(post_data)); postData.append('page', current_page); const xhr = new XMLHttpRequest(); xhr.open(sendType, ajaxurl); this.innerText = 'Посты загружаются...'; this.disabled = true; xhr.addEventListener('readystatechange', function (data) { if (this.readyState === 4 && this.status === 200) { console.log(data); postContainer.innerHTML = data.target.responseText; loadMoreBtn.innerText = 'Загрузить еще'; loadMoreBtn.disabled = false; current_page++; console.log(current_page); if (current_page >= max_pages) { loadMoreBtn.remove(); } } }); for(var pair of postData.entries()) { console.log(pair[0]+ ', '+ pair[1]); } xhr.send(postData); }) } })
function loadmore_get_posts(){ $args = json_encode($_POST['query'], true ); $args['paged'] = $_POST['page'] + 1; $args['post_status'] = 'publish'; query_posts( $args ); if(have_posts()) : while(have_posts()): the_post(); the_post();?> <div class="news__table-item"> <div class="news__table-img-container"> <img src="<?php the_post_thumbnail_url(); ?>" alt="Картинка новости" class="news__table-img"> </div> <div class="news__table-content"> <span class="news__table-category"> <?php foreach((get_the_category()) as $category) { echo $category->cat_name . ' '; } ?> </span> <a href="<?php the_permalink(); ?>" class="news__table-title"> <?php the_title(); ?> </a> <p class="news__table-desc"> <?php the_content(); ?> </p> <div class="news__table-date"> <?php the_date(); ?> </div> </div> </div> <?php endwhile; endif; wp_die(); } add_action('wp_ajax_loadmore', 'loadmore_get_posts'); add_action('wp_ajax_nopriv_loadmore', 'loadmore_get_posts');
<script> let ajaxurl = '<?php echo admin_url('admin-ajax.php') ?>'; let current_page = <?php echo (get_query_var('paged')) ? get_query_var('paged') : 1; ?>; let max_pages = <?php echo $custom_query->max_num_pages ?>; let post_data = <?php echo json_encode($custom_query->query_vars); ?>; </script>
Я больше склоняюсь в ошибку где-то в написании php-скрипта. Но, в силу отстутствия опыта, не могу ее найти
- Тема «Ajax подгрузка постов работает некорректно.» закрыта для новых ответов.