2012-10-13 89 views
0

嗨,我有一個腳本,當用戶點擊加載更多的按鈕,ajax會要求新的內容和 顯示給用戶,但我有問題,如果所有的內容已被加載,如果用戶點擊加載更多的按鈕它會導致錯誤並重復顯示多個加載更多按鈕。以下是我的代碼,需要知道如何解決此問題。如果沒有內容加載按鈕需要被禁用。謝謝你們!PHP AJAX加載更多

ajax_more.php

<?php 
include("config.php"); 


if(isSet($_POST['lastmsg'])) 
{ 
$lastmsg=$_POST['lastmsg']; 
$result=mysql_query("select * from messages where mes_id<'$lastmsg' limit 3"); 
$count=mysql_num_rows($result); 
while($row=mysql_fetch_array($result)) 
{ 
$msg_id=$row['mes_id']; 
$message=$row['msg']; 
?> 


<li> 
<?php echo $message; ?> 
</li> 


<?php 
} 


?> 

<div id="more<?php echo $msg_id; ?>" class="morebox"> 
<a href="#" id="<?php echo $msg_id; ?>" class="more">more</a> 
</div> 

<?php 
} 
?> 

loadmore.php

<?php 
include('config.php'); 

?> 
<!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>Twitter Style load more results.</title> 
<link href="frame.css" rel="stylesheet" type="text/css"> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/ 
libs/jquery/1.3.0/jquery.min.js"></script> 

<script type="text/javascript"> 
$(function() { 
//More Button 
$('.more').live("click",function() 
{ 
var ID = $(this).attr("id"); 
if(ID) 
{ 
$("#more"+ID).html('<img src="moreajax.gif" />'); 

$.ajax({ 
type: "POST", 
url: "ajax_more.php", 
data: "lastmsg="+ ID, 
cache: false, 
success: function(html){ 
$("ol#updates").append(html); 
$("#more"+ID).remove(); 
} 
}); 
} 
else 
{ 
$(".morebox").html('The End'); 

} 


return false; 


}); 
}); 

</script> 
<style> 
body 
{ 
font-family:Arial, 'Helvetica', sans-serif; 
color:#000; 
font-size:15px; 

} 
a { text-decoration:none; color:#0066CC} 
a:hover { text-decoration:underline; color:#0066cc } 
* 
{ margin:0px; padding:0px } 
ol.timeline 
    { list-style:none}ol.timeline li{ position:relative;border-bottom:1px #dedede dashed; padding:8px; }ol.timeline li:first-child{} 
    .morebox 
    { 
    font-weight:bold; 
    color:#333333; 
    text-align:center; 
    border:solid 1px #333333; 
    padding:8px; 
    margin-top:8px; 
    margin-bottom:8px; 
    -moz-border-radius: 6px;-webkit-border-radius: 6px; 
    } 
    .morebox a{ color:#333333; text-decoration:none} 
    .morebox a:hover{ color:#333333; text-decoration:none} 
    #container{margin-left:60px; width:580px } 

</style> 
</head> 

<body> 
<div style="padding:4px; margin-bottom:10px; border-bottom:solid 1px #333333; "><h3>Tutorial Link <a href="http://9lessons.blogspot.com/2009/12/twitter-style-load-more-results-with.html">Click Here</a></h3></div> 
<div id='container'> 
<ol class="timeline" id="updates"> 
<?php 
$sql=mysql_query("select * from messages LIMIT 3"); 
while($row=mysql_fetch_array($sql)) 
{ 
$msg_id=$row['mes_id']; 
$message=$row['msg']; 
?> 
<li> 
<?php echo $message; ?> 
</li> 
<?php } ?> 
</ol> 
<div id="more<?php echo $msg_id; ?>" class="morebox"> 
<a href="#" class="more" id="<?php echo $msg_id; ?>">more</a> 
</div> 
</div> 

</body> 
</html> 
+0

我不明白你想要什麼,以及什麼錯?請告訴我你的目標?就像按鈕應該消失一樣梨一旦加載?或者是什麼?? – geekman

+0

嗨,謝謝你的反饋,我已經解決了這個問題。其實不是我想讓按鈕消失或是如此。代碼存在錯誤。一旦加載所有內容,並且如果用戶再次單擊該按鈕,則按鈕本身重複多次。 – d3bug3r

回答

2
<?php 
include("config.php"); 

$count=0; 
$done=false; 
if(isSet($_POST['lastmsg'])) 
{ 
$lastmsg=$_POST['lastmsg']; 
$result=mysql_query("select * from messages where mes_id<'$lastmsg' limit 3"); 
$check=mysql_result(mysql_query("select mes_id from messages ORDER BY mes_id ASC limit 1")); 
$count=mysql_num_rows($result); 
while($row=mysql_fetch_array($result)) 
{ 
$msg_id=$row['mes_id']; 
$message=$row['msg']; 
if($row['mes_id']==$check){$done=true;} 
$count++; 
?> 


<li> 
<?php echo $message; ?> 
</li> 


<?php 
} 

if($count>0 && !$done){ 
?> 

<div id="more<?php echo $msg_id; ?>" class="morebox"> 
<a href="#" id="<?php echo $msg_id; ?>" class="more">more</a> 
</div> 

<?php 
} 
} 
?> 

說明:您被無條件地輸出更多的鏈接。隨着所做的更改,腳本將檢查是否在輸出更多鏈接之前,已從表中加載了超過0條消息。我也更新它來檢查當前批是否是最後一個,如果是,則不輸出更多的div。

0

在PHP部分,只有當您返回的行大小計數大於0

邊緣的情況下顯示更多按鈕:

  1. 如果n行數據庫表大小的增加,你會重複ñ 每次你打更多
  2. 如上,但如果記錄被刪除,你就會錯過記錄

安全我的時間記錄錯誤:

  1. 通過發送「0」進行SQL注入;截斷消息; - 」中的最後一條消息後場
  2. 跨站腳本 - 如果用戶可以用HTML/JavaScript的,他們將在內容被退回提交郵件沒有逃脫

在上述兩種情況下,使用。MySQL的轉義字符串(http://php.net/manual/en/function.mysql-real-escape-string.php),或使用庫MySQLi,並使用ヶ輛(http://php.net/manual/en/function.htmlentities.php

1

試試這個代碼;

$.ajax({ 
**$("#load_buton").attr("disabled","disabled");** 
    type: "POST", 
    url: "ajax_more.php", 
    data: "lastmsg="+ ID, 
    cache: false, 
    success: function(html){ 
    $("ol#updates").append(html); 
    $("#more"+ID).remove(); 
**$("#load_buton").removeAttr("disabled");** 
    });