2017-07-28 94 views
2

我在页面上有一个ajax帖子加载器。调用它的链接看起来是这样的:ajax页面加载器404错误

<div class="load_more_cont"> 
    <p align="center"> 
    <a href="http://www.example.com/category/books/page/5/" title="Load more"><span class="fa fa-angle-down fa-fw button" aria-hidden="true"></span></a> 
    </p> 
</div> 

,这是AJAX:

$('.load_more_cont a').on('click', function(e) 
{ 
e.preventDefault(); 

//how many posts per page 
var posts_per_page = 12; 

//set button to contain spinning loading icon 
$(this).html('<span class="fa fa-refresh fa-spin fa-fw loading" aria-hidden="true">'); 
console.log($(this).attr('href') + '#main_container'); 

$.ajax({ 
    type: "GET", 
    url: $(this).attr('href') + '#main_container', 
    dataType: "html", 
    success: function(out) 
    { 
     //result of query 
     result = $(out).find('#load_posts_container .home_post_box'); 

     //append result to posts container 
     $('#load_posts_container').append(result).masonry('appended', result, true); 

     //find the next link in the returned result 
     nextlink = $(out).find('.load_more_cont a').attr('href'); 

     //if (nextlink != undefined) 
     if (result['length'] == posts_per_page) 
     { 
      //add the next link to the load more button 
      $('.load_more_cont a').attr('href', nextlink); 
      $('.load_more_cont a').html('<span class="fa fa-angle-down fa-fw button" aria-hidden="true">'); 
     } 
     else 
     { 
      //remove the load more button and add a clearing div 
      $('.load_more_cont').remove(); 
      $('#load_posts_container').append('<div class="clear"></div>'); 
     } 
    }, 
    error: function(xhr, ajaxOptions, thrownError){ 
     console.log(xhr.status); 
     console.log(thrownError); 
    } 
}); 
}); 

它工作的很好,但是当我到达的类别5页(如图书5页以上)我收到一个404错误。如果我在浏览器中加载类别url没有问题 - 第5页和第6页都存在并加载。一切都在同一台服务器上。如果我不选择一个类别,所以url看起来像这样http://www.example.com/page/5/那么它也可以正常工作。任何想法可能是什么问题?

+1

您是否检查过$(this).attr('href')'以确保它返回正确的路径?您可以通过console.log($(this).attr('href'));'在控制台中进行打印,或者您可以使用开发工具中的网络部分监控ajax调用。 – NewToJS

+0

这就是我发布的代码。 – garrettlynch

+0

它是否显示正确的路径?你有没有在开发工具中检查网络?它必须是一个错别字,因为404意味着它不存在。尝试从通话中删除'#main_container'。 – NewToJS

回答

0

解决方案是wordpress中的每页帖子设置(我已设置为16),帖子显示方式(每页显示12个)以及404如何处理(按索引.php而不是404.php页面)。所以从某种意义上说,从整个页面获得404的404是完全正确的,尽管它看起来像是一个矛盾。只要我给wordpress一个404.php页面,我就能够分开这些问题,然后跟踪由于每页设置导致的页面计数不正确。

1

如果您的条件在这里没有意义,请点击:if (result['length'] == posts_per_page)。如果您留下的留言数量超过posts_per_page,则会出现分页链接。如果页面上有5个项目和posts_per_page = 5,这并不意味着有下一页。

通常情况下,应该没有分页链接,如果你是在最后一页上,所以检查应该是这样的

if ($(out).find('.load_more_cont a').length > 0) { ... 

我的猜测是,你必须在最后一页上posts_per_page量项目,并设置undefined的下一个链接会导致错误。

+0

条件'if(result ['length'] == posts_per_page)'是正确的。结果仅返回每页12个,因此检查它是否与其完全相同,如果是这样,则消除链接是正确的。但是,你说的12页在页面上并不意味着有下一页。我忽略了这样的情况,换掉了这个if(nextlink!=“”)'的条件(类似于你发布的内容),这意味着我可能会丢失posts_per_page。无论如何,这不是问题。对第5页的请求是一贯失败的 - 第5页有12项(整页),第6页有4项。 – garrettlynch