Intereting Posts
wp_editor для персонализированного типа сообщения не сохраняет значение Как проверить, существует ли мета-ключ сообщения в базе данных wordpress функция обратного вызова по умолчанию в wp_list_comments Пользовательская страница как отдельная страница или пользовательский тип сообщения? Контактная форма Безопасность Отсутствует текст в IE11 Как настроить htaccess для перенаправления определенного типа сообщения или подкаталога на HTTPS? Запросить пользовательские сообщения из пользовательской таксономии Предупреждение: in_array () ожидает, что параметр 2 будет массивом, null TwentyTen: перегрузка файлов template.php и get_template_part Архивная страница с фильтром поиска и категории Как добавить автора и дату? Опубликован на страницах категории? Руководство или инструмент для вставки бутстрапа в тему подчеркивания? Есть ли способ прогматически создавать категории продуктов и назначать миниатюры в PHP и WooCommerce? Как удалить плагин Hello Dolly автоматически?

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(); }; }; }) 

;