首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP AJAX加载更多

PHP AJAX加载更多
EN

Stack Overflow用户
提问于 2012-10-13 19:10:35
回答 3查看 6.6K关注 0票数 0

嗨,我有一个脚本,当用户点击加载更多的按钮,ajax将请求新的内容和显示给用户,但我有问题,如果所有的内容已经加载,如果用户点击加载更多按钮,它会导致错误和重复显示多个加载更多button.Following是我的代码,需要知道如何解决这个问题。如果没有内容加载的按钮需要是disabled.Thanks的家伙!!

ajax_more.php

代码语言:javascript
复制
 <?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

代码语言:javascript
复制
<?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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-13 19:16:01

代码语言:javascript
复制
<?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。

票数 2
EN

Stack Overflow用户

发布于 2012-10-13 19:33:25

试试这段代码;

代码语言:javascript
复制
   $.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");**
    });
票数 1
EN

Stack Overflow用户

发布于 2012-10-13 19:25:58

在php部分中,仅当返回的行大小计数大于0时才显示更多按钮

边缘情况:

  1. 如果数据库表的大小增加了n行,则每次命中更多的
  2. 时都会重复n条记录,但如果删除记录,则会遗漏记录

安全问题:

通过发送“0”进行

  • SQL注入;截断消息;--“在上一条消息发布字段中

  • 跨站点脚本-如果用户可以使用HTML/JavaScript提交消息,则它们将在内容中返回,而不会转义。

在上述两种情况下,请使用。MySQL转义字符串( http://php.net/manual/en/function.mysql-real-escape-string.php ),或使用mysqli和使用htmlentities ( http://php.net/manual/en/function.htmlentities.php )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12872530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档