2014-09-26 108 views
0

我试图创建一个显示注释存储在数据库中的博客事物:但是我希望当用户向下滚动时在页面上动态创建它,而不是有链接到下一组评论。从数据库动态加载元素

目前我正在使用MySQL与PHP来显示存储的评论。

$query = "SELECT * FROM comment ORDER BY time DESC"; 
$result = mysql_query($query); 

while($data = mysql_fetch_assoc($result)){ 
    echo "<comment><div class='comment-bubble'><p>" . $data['comment'] . "</p></div>"; 
    //other div structure & data here 
} 

我知道有插件可用,如jscroll。但是这会从其他HTML文件而不是从数据库中获取数据。

我知道该方法可能需要改变,因为PHP在页面加载之前加载数据......那么最好的方法是什么呢?

谢谢你们!

+0

当你滚动时,你应该考虑在mysql查询中使用“limit”组合。 – 2014-09-26 05:49:25

+1

我认为你需要访问这个[页](http://stackoverflow.com/questions/11212396/load-content-from-mysql-on-scroll-with-ajax-post) – 2014-10-01 01:37:47

回答

1

好吧,从我研究的数量来看,实际上不可能通过mySQL动态更新,而无需首先加载所有评论。这是因为PhP在页面显示前加载,所以JavaScript不能动态显示更多注释,除非页面被刷新。

我打算在AJAX上试试,因为它是为动态变化的网站而制作的。我希望尽快发布我的完整答案。

编辑:使用jQuery AJAX我想出了这一点:

//Load more comments when reaching the end of the page 
var isPreviousEventComplete = true, isDataAvailable = true; 
$(window).scroll(function() { 
    if ($(document).height() - 50 <= $(window).scrollTop() + $(window).height()) { 
     if (isPreviousEventComplete && isDataAvailable) { 

      isPreviousEventComplete = false; 
      $(".LoaderImage").css("display", "block"); 

      $.ajax({ 
       type: "POST", 
       url: 'ajax/query.php', 
       data: "from=" + counter, 

       success: function (html) { 
        $("#comments").append(html); 
        counter++; 
        isPreviousEventComplete = true; 

        if (html == '') isDataAvailable = false; 

        $(".LoaderImage").css("display", "none"); 
       }, 
       error: function (error) { 
        alert("error " + error); 
       } 
      }); 

     } 
    } 
}); 

就像一个魅力。感谢Hendry Tanaka指引我朝着正确的方向。

+0

保持movin'pal ... – 2015-01-16 05:19:28

1

最好的解决办法是在MySQL查询中限制组合。

例如

`SELECT * FROM comment ORDER BY time DESC LIMIT 0,10; # Retrieve rows 1-10` 

,然后你可以尝试使用

`SELECT * FROM comment ORDER BY time DESC LIMIT 10,10; # Retrieve rows 11-20` 

等,以获取在时间每次滚动时10个评论。

+0

限制SQL很容易,但是我更多地指的是如何动态显示评论。 'function load(){var comments = document.getElementById(“comments”); comments.innerHTML + =“<?php $ counter = 0; include'comments.php';?>”; counter + = 2; }' 是我现在试图使用的: '$ query =“SELECT * FROM comment ORDER BY time DESC LIMIT”。$ counter。“,”。($ counter + 2);' 但是我不能在<?php中将$ counter设置为一个javascript变量。有任何想法吗? – ChiMo 2014-10-01 01:34:55

1

只需加载所有数据并隐藏第二个数据直到最后一个。如果用户滚动值与用户滚动鼠标时的scrollTop()返回值具有相同的值,请使用像scrollTop()这样的jQuery技巧来逐步检测您的div的滚动和fadeIn()div。

+0

如果我有超过100条评论,这不会是最好的方法。但谢谢你的建议。 – ChiMo 2014-10-01 01:32:21