2012-08-25 66 views
-1

我有一個代碼,當我向下滾動我的頁面,它會從數據庫中加載更多的內容,但我的問題是當我滾動速度太快,內容從數據庫副本,如果我用這個代碼和結果來的是,這將是麻煩爲我的用戶,重複的內容與負載內容,同時向下滾動使用jQuery,PHP

這裏是代碼:

<?php 
include('../connection.php'); 

$action = @$_POST['action']; 
$boxid = @$_POST['boxid']; 

if($action <> "get") 
{ 
?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title></title> 
<link rel="stylesheet" href="scroll.css" type="text/css" /> 
<script type="text/javascript" src="../js/jquery-1.2.6.pack.js"></script> 

    <script type="text/javascript"> 
    $(document).ready(function(){ 

     function last_msg_funtion() 
     { 

      var boxid=$(".message_box:last").attr("id"); 
      var action = "get"; 
      $('div#last_msg_loader').html('<img src="bigLoader.gif">'); 
      $.post("loader.php", { boxid: boxid, action: action }, function(data){ 
       if (data != "") { 
       $(".message_box:last").after(data);   
       } 
       $('div#last_msg_loader').empty(); 
      }); 
     }; 

     $(window).scroll(function(){ 
      if ($(window).scrollTop() == $(document).height() - $(window).height()){ 
       last_msg_funtion(); 
      } 
     }); 

    }); 
    </script> 

</head> 

<body> 
<div align="center"> 

<?php 
$sql=mysql_query("SELECT * FROM announcements ORDER BY announce_id DESC LIMIT 10"); 
while($row=mysql_fetch_array($sql)) 
     { 
     $msgID= $row['announce_id']; 
     $msg= $row['content']; 
     $posted= $row['postedby']; 
?> 
<div id="<?php echo $msgID; ?>" align="left" class="message_box" > 
<span class="number"><?php echo $posted; ?></span><?php echo "<b>".$msgID."</b>"; echo $msg; ?> 
</div> 

<?php 
} 
mysql_close(); 
?> 

<div id="last_msg_loader"></div> 
</div> 
</body> 
</html> 

<?php 
} 
else 
{ 

$last_msg_id=$boxid; 
$sql=mysql_query("SELECT * FROM announcements WHERE announce_id < '$boxid' ORDER BY announce_id DESC LIMIT 5"); 
$last_msg_id=""; 

     while($row=mysql_fetch_array($sql)) 
     { 
     $msgID= $row['announce_id']; 
     $msg= $row['content']; 
     $posted= $row['postedby']; 
     ?> 
     <div id="<?php echo $msgID; ?>" align="left" class="message_box" > 
<span class="number"><?php echo $posted; ?></span><?php echo "<b>".$msgID."</b>"; echo $msg; ?> 
</div> 
<?php 
} 
mysql_close(); 


     } 
     ?> 

在先進的感謝!我希望有人能幫助我:)

+0

確保數據加載完整的方法http://api.jquery.com/jQuery.post/ – Breezer

回答

0

試試這個。它可能會解決你的問題

$(document).ready(function(){ 
    var boxid; // declare global 
    function last_msg_funtion() 
    { 

    if(boxid==$(".message_box:last").attr("id")) return false; // check with previous id 

     boxid=$(".message_box:last").attr("id"); 
     var action = "get"; 
     $('div#last_msg_loader').html('<img src="bigLoader.gif">'); 
     $.post("loader.php", { boxid: boxid, action: action }, function(data){ 
      if (data != "") { 
      $(".message_box:last").after(data);   
      } 
      $('div#last_msg_loader').empty(); 
     }); 
    }; 

    $(window).scroll(function(){ 
     if ($(window).scrollTop() == $(document).height() - $(window).height()){ 
      last_msg_funtion(); 
     } 
    }); 

}); 
+0

謝謝@MMK!你是一個拯救生命的人! :)我會嘗試分析你對代碼所做的事情,或者你只是將boxid聲明爲全局的,而且這樣做? – JakeWevDeb

+0

是的。我們需要將boxid聲明爲全局的,並且檢查boxid等於最後一個消息框ID等於意味着我們需要停止/返回函數(因爲在ajax載入期間,它們在滾動時獲得先前的msg id,並且該時間全局值也包含相同的id。) 。 – MMK

0

試試這個代碼...可能只是工作

$(document).ready(function(){ 

     function last_msg_funtion() 
     { 

      var boxid=$(".message_box:last").attr("id"); 
      var action = "get"; 
      $('div#last_msg_loader').html('<img src="bigLoader.gif">'); 
      $.post("loader.php", { boxid: boxid, action: action }, function(data){ 
       if (data != "") { 
       $(".message_box:last").after(data);   
       } 
       $('div#last_msg_loader').empty(); 
      }).complete(function() { return true; }); 
     }; 

     $(window).scroll(function(){ 
      if ($(window).scrollTop() == $(document).height() - $(window).height()){ 
       if(!last_msg_funtion()){ 
        return false; 
       } 
      } 
     }); 

    }); 

編輯:我改變退出,返回false ...因爲出口可能會破壞jQuery的..不知道,但測試都適合你的鞋子;)...也許雖然會更好地使用,而不是如果...哦,以及

+0

感謝您的回答,先生,我想知道具體是什麼原因造成的複製數據內容如果我滾動速度過快或按住向下鍵,直到達到它的底部,內容仍然重複,我試過你的代碼,但它仍然是相同的,你是什麼意思,數據應該加載使用完整的方法api.jquery.com/jQuery.post – JakeWevDeb