2012-09-14 59 views
2

我有一个数据库,它包含1000多条记录。我必须显示它在前端的PHP页面,如果我显示所有它将需要更多的时间来加载,所以如果用户滚动信息应该在滚动后获取。就像Facebook和Pinterest一样。如何实现这一目标? 我的DB: - MySQL的 服务器: - WAMP如何在滚动时从mysql数据库获取数据

+1

不,请不,不是[无限滚动](http://blog.tommorris.org/post/21073443312/introducing-awf ulness-JS)。 – Quentin

+0

这不是一个真正的MySQL问题,更多的是一个JavaScript的问题...尝试http://stackoverflow.com/a/5212757/889604 – ChrisW

+0

可能的重复[Facebook如何实现无限滚动?](http:// stackoverflow.com/questions/10404699/how-does-facebook-achieve-infinite-滚动) – Quentin

回答

0

使用jQuery(或您喜爱的图书馆),当用户到达页面的最后检测,然后就触发一个Ajax请求下一个N结果的服务器。

例如:

JavaScript部分:

var n = 0; 

$(document).ready(function() { 
    $(window).scroll(function() { 
     if ($('body').height() <= ($(window).height() + $(window).scrollTop())) { 
      $.ajax({ 
       url: "my_page.php", 
           data: {'n' : n}, 
       context: document.body 
      }).done(function(data) { 
       n += 1; 
       console.log(data); // <--- do stuff with received data here 
      }); 
     } 
    }); 
}); 

PHP部分:

$n = $_POST['n']; 
$n = 10 * $n; 
$sql = "SELECT * FROM mytable LIMIT $n, 10"; // get 10 new entries each request. 
+0

可以请你提供一个链接或详细解释 – user1561923

+0

@ user1561923 - 评论中至少有3个例子对你的原始问题 – ChrisW

+0

好吧,JavaScript部分不需要任何进一步的例子,因为这是一个复制和粘贴的工作示例。您需要在“my_page.php”中编写代码,每次获取N个条目。我会更新我的答案。 – alexandernst

0

你的问题是通用的,很难用的代码片段来回答。
这可能是伪码的解决方案

  • 通过做这样SELECT * FROM yourTable WHERE ..... ORDER BY .... LIMIT 50
  • 使用jQuery查询检测滚动事件
  • 做一个AJAX调用取件的默认数量(比如50)一旦检测到滚动事件
  • 您在哪里再次读取50个元素一个新的查询,但这次考虑到已滚动(因此,加增量或偏移)
  • 渲染来自AJAX
  • 返回的元素
+1

我得到了答案在这里它很好 http://www.9lessons。方式/ 2009/07 /负载数据而涡卷与 - jQuery的php.html – user1561923

1

步骤1]取点点的jquery作为一个帮助....

var countScroll= 0; 
$(window).scroll(function() 
{ 
     if ($(window).scrollTop() == $(document).height() - $(window).height()) 
     { 
     loadData(); 
     } 
     countScroll++; 
}); 

步骤2]以AJAX的帮助来调用loadData()函数

function loadData() 
{ 
    var xmlhttp; 
    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     {    
     var res = xmlhttp.responseText; 
     document.getElementById("respDiv").innerHTML=res;   
      } 
    } 
    xmlhttp.open("GET","loadPageData.php?loadLimit="+countScroll,true); 
     xmlhttp.send(); 
    } 

步骤3 ]你的PHP页面即loadPageData.php是...

$loadLimit= $_GET['loadLimit']; 
    $result = mysql_query("SELECT * FROM tableName limit $loadLimit"); 
    if(mysql_num_rows($result)>0) 
    { 
     while($row = mysql_fetch_array($result)) 
     { 
     echo $yourVariable= $row['fieldName']; 
      } 
    } 
相关问题