Intereting Posts
Получить посты на основе категории более двух категорий Можно ли загружать другую боковую панель в single.php на основе фильтра meta_query? шаблоны пользовательских страниц в WordPress Переписывание URL не работает Как я могу изменить свою meta_query для работы с ценами, которые хранятся в базе данных, которые содержат знаки доллара и запятые? Отображение пользовательских полей на родительской странице Пользовательская роль пользователя не отображается в admin Создание формы для пользователя, чтобы добавить новый пользовательский пост с пользовательскими таксономиями и настраиваемыми полями Сортировка записей по дате – get_blogs_of_user_id () ? login = не удалось подключиться только к URL при определенных обстоятельствах Получение номера комментария по отношению ко всем комментариям Обрезка, повторная калибровка и сохранение изображений из одной папки в другую папку в wordpress Невозможно создать или отредактировать меню Как добавить пользовательский тип сообщения, который выглядит и ведет себя точно так же, как и сообщения? Как исправить проблему с предварительным просмотром пользовательских настроек?

AJAX возвращается слишком много сообщений

Я пытаюсь загрузить сообщения через AJAX, но в то время как приведенный ниже код работает при загрузке страницы, после начальных 8 сообщений возврат – это все. Похоже, что не имеет смысла, почему на загрузке страницы он будет работать, а затем последующие запросы возвращают так много результатов.

Запрос относится к нескольким категориям одного и того же типа сообщений, идентификатор категории получается при нажатии вкладки (которая работает нормально):

var cat = jQuery(this).attr("id"); 

Есть ли что-то очевидное, что я здесь отсутствует?

// HTML

 <div class="aj_load">Loading...</div> <div id="data"></div> 

// Сообщения AJAX (на странице)

  var pageNumber = '1'; function load_posts(){ var cat = jQuery("#tabs li.active").attr("id"); jQuery(".aj_load").animate({'opacity' : 1}, 300); pageNumber++; var str = '&cat=' + cat + '&pageNumber=' + pageNumber + '&action=load_more'; jQuery.ajax({ type: "POST", dataType: "html", url: ajaxurl, data: str, success: function(data){ var jQuerydata = jQuery(data); if(jQuerydata.length){ jQuery(".aj_load").animate({'opacity' : 0}, 300); jQuery("#data").append(jQuerydata); } }, error : function(jqXHR, textStatus, errorThrown) { jQueryloader.html(jqXHR + " :: " + textStatus + " :: " + errorThrown); } }); return false; } // Run load_posts() on document load jQuery(document).ready(function(){ load_posts(); }); // Run load_posts() on scroll jQuery(document).on('scroll', function() { var distanceFromBottom = Math.floor(jQuery(document).height() - jQuery(document).scrollTop() - jQuery(window).height()); if(distanceFromBottom < 400) { load_posts(); } }); 

// Функция загрузки AJAX больше (в functions.php)

 function load_more(){ $cat = $_REQUEST['cat']; $page = $_POST['pageNumber']; header("Content-Type: text/html"); $args = array( 'cat' => $cat, 'post_type' => 'post', 'orderby' => 'date', 'order' => 'DESC', 'suppress_filters' => true, 'posts_per_page' => 8, 'paged' => $page, ); $loop = new WP_Query($args); if ($loop -> have_posts()) : while ($loop -> have_posts()) : $loop -> the_post(); locate_template('/parts/news-loop.php', TRUE, FALSE); endwhile; else : echo "No More Posts"; endif; wp_reset_postdata(); die(); } add_action('wp_ajax_nopriv_load_more', 'load_more'); add_action('wp_ajax_load_more', 'load_more'); 

// Шаблон цикла

 <?php $cats = get_the_category(); $cat_slug = $cats[0]->slug; ?> <div class="news-post"> <h2><?php the_title(); ?> - <?php the_time('dS F Y') ;?></h2> <div class="news-line"></div> <div class="news-hex <?php echo $cat_slug; ?>"></div> <div class="text"> <p><?php echo wp_trim_words(get_the_content(), 40, '...') ?></p> <a class="more" href="<?php the_permalink(); ?>">FIND OUT MORE</a> </div> <div class="clear"></div> </div> 

Solutions Collecting From Web of "AJAX возвращается слишком много сообщений"

Хорошо, поэтому я не уверен, что это лучшая практика, но после тестирования кода с помощью onclick, а не прокрутки страницы загружаются соответствующим образом. Я столкнулся с проблемой множества результатов, добавив условие, чтобы возвращать true только после завершения AJAX;

 // AJAX Posts var pageNumber = '0'; pauseAJAX = 'yes'; function load_posts(){ var cat = jQuery("#tabs li.active").attr("id"); jQuery(".aj_load").animate({'opacity' : 1}, 300); pauseAJAX = 'yes'; pageNumber++; var str = '&cat=' + cat + '&pageNumber=' + pageNumber + '&action=load_more'; jQuery.ajax({ type: "POST", dataType: "html", url: ajaxurl, data: str, success: function(data){ var jQuerydata = jQuery(data); if(jQuerydata.length){ jQuery(".aj_load").animate({'opacity' : 0}, 300); jQuery("#data").append(jQuerydata); pauseAJAX = 'no'; } }, error : function(jqXHR, textStatus, errorThrown) { jQueryloader.html(jqXHR + " :: " + textStatus + " :: " + errorThrown); } }); return false; } jQuery(window).scroll(function(){ if(jQuery(window).scrollTop() + 400 > jQuery(document).height() - jQuery(window).height() ){ if(pauseAJAX == 'no') { load_posts(); }; }; }) 

;