2017-03-08 60 views
1

我遇到了我的代碼有問題。 所以當我碰到結果的時候,ajax請求會一遍又一遍地運行。 我不知道如何去解決這個問題,但是我希望當數據庫沒有更多結果時,無限滾動停止運行。Ajax無限滾動停止時沒有結果

初始AJAX請求到AJAX的posts.php

var pageCategory = "' . $categoryId . '"; 
        $.post("/testwp2/wp-content/themes/my-theme/ajax-posts.php", { 
         initialize: true, pageCategory: pageCategory, resultLimit: 6 
        }).done(function(data) { 
         $("#primary #main").html(data); 
        }); 

然後在Ajax的posts.php

global $wpdb; 
    global $post; 

    $limit = $_POST['resultLimit']; 

    $querystrMax = "SELECT {$wpdb->prefix}posts.ID, {$wpdb->prefix}posts.post_title, {$wpdb->prefix}posts.post_excerpt, {$wpdb->prefix}posts.guid, {$wpdb->prefix}posts.post_date, {$wpdb->prefix}posts.post_author 
     FROM {$wpdb->prefix}posts 
     LEFT JOIN {$wpdb->prefix}term_relationships rel ON rel.object_id = {$wpdb->prefix}posts.ID 
     LEFT JOIN {$wpdb->prefix}term_taxonomy tax ON tax.term_taxonomy_id = rel.term_taxonomy_id 
     LEFT JOIN {$wpdb->prefix}terms t ON t.term_id = tax.term_id 
     WHERE t.term_id = " . $_SESSION['pageCategory'] . " 
     AND {$wpdb->prefix}posts.post_type = 'post' 
     ORDER BY {$wpdb->prefix}posts.post_date DESC 
    "; 

    $pagepostsMax = $wpdb->get_results($querystrMax, OBJECT); 

    $maxPostNum = count($pagepostsMax); 

    $querystr = "SELECT {$wpdb->prefix}posts.ID, {$wpdb->prefix}posts.post_title, {$wpdb->prefix}posts.post_excerpt, {$wpdb->prefix}posts.guid, {$wpdb->prefix}posts.post_date, {$wpdb->prefix}posts.post_author 
    FROM {$wpdb->prefix}posts 
    LEFT JOIN {$wpdb->prefix}term_relationships rel ON rel.object_id = {$wpdb->prefix}posts.ID 
    LEFT JOIN {$wpdb->prefix}term_taxonomy tax ON tax.term_taxonomy_id = rel.term_taxonomy_id 
    LEFT JOIN {$wpdb->prefix}terms t ON t.term_id = tax.term_id 
    WHERE t.term_id = " . $_SESSION['pageCategory'] . " 
    AND {$wpdb->prefix}posts.post_type = 'post' 
    ORDER BY {$wpdb->prefix}posts.post_date DESC 
    LIMIT $limit 
    "; 

    $pageposts = $wpdb->get_results($querystr, OBJECT); 
} 

$pagePostsNum = count($pageposts); 


$response = ''; 

if ($pagePostsNum <= ($maxPostNum - 6)) { 
    $response .= ' 
     <script type="text/javascript"> 
       jQuery(window).scroll(function() { 
        if(jQuery(window).scrollTop() + jQuery(window).height() == jQuery(document).height()) { 
         var pageCategory = ' . $_SESSION['pageCategory'] . ' 
         jQuery.post("/testwp2/wp-content/themes/my-theme/ajax-posts.php", { 
          initialize: true, pageCategory: pageCategory, resultLimit: 6 + ' . $limit . ' 
         }).done(function(data) { 
          jQuery("#primary #main").html(data); 
         }); 
        } 
       }); 
     </script> 
    '; 
} 
else { 
    $response .= '<p>No more results!</p>'; 
} 


if ($pageposts): 
    foreach ($pageposts as $post): 
     $postId = get_the_ID(); 
     $postPermalink = get_the_permalink($postId); 
     $postTitle = get_the_title(); 

     $response .= ' 
     <article class="gridView col-lg-4 col-md-6 col-xs-12"> 
      <div class="list-article-thumb" style="background: url('; if (get_the_post_thumbnail_url() == false) { $response .= get_stylesheet_directory_uri() . '/images/placholder2.png'; } else { $response .= get_the_post_thumbnail_url(); } $response .= ') no-repeat; height: 445px; background-size: cover; position: relative;">'; 


       <a href="' . esc_url($postPermalink) . '"> 
        <div class="postLayoutOverlay"></div> 
       </a> 
      </div> 

     </article> 
     '; 
    endforeach; 

    wp_reset_query(); 

else : 
    $response = ' 
    <h2 class="center">Not Found</h2> 
    <p class="center">Sorry, but you are looking for something that isn\'t here.</p> 
    '; 
endif; 

echo $response; 

由於同胞overflowers的代碼。

回答

0

好吧,我想通了。 在最初的ajax後有這initialize: true

所以在ajax-posts.php我檢查使用該職位變種的初始負載。

if (isset($_POST['initialize'])) { 
    $response .= ' 
     <script type="text/javascript"> 
       jQuery(window).scroll(function() { 
        if(jQuery(window).scrollTop() + jQuery(window).height() == jQuery(document).height()) { 
         var pageCategory = ' . $_SESSION['pageCategory'] . ' 
         jQuery.post("/testwp2/wp-content/themes/my-theme/ajax-posts.php", { 
          initialize: true, pageCategory: pageCategory, resultLimit: 6 + ' . $limit . ' 
         }).done(function(data) { 
          if (data != false) { 
           jQuery("#primary #main").html(data); 
          } 
         }); 
        } 
       }); 

       console.log(); 
     </script> 
    '; 
} 

這樣腳本只添加一次。 然後當我沒有更多的帖子來顯示我使用此代碼來解除滾動功能。

if ($limit <= $maxPostNum) { 
    $response .= ' 
     <script type="text/javascript"> 
      jQuery(window).unbind("scroll"); 
     </script> 
    '; 
} 

and voila,works a treat。 :D