如何通过JQuery/Ajax请求返回最新的Mysql条目
问题描述:
我想通过Ajax将最新的mysql表中的条目拖动到div中并将其显示为html内容。我有一个Ajax和PHP功能正常,我唯一的问题是,我想查询新的条目,并在一个循环内的时间间隔堆栈结果,我遇到了两个问题:获取数据的行为像一个正常的JavaScript字符串,并获得循环只返回唯一的条目。如何通过JQuery/Ajax请求返回最新的Mysql条目
update.php文件
$con=mysqli_connect("mydbhost.com","username","password","database_name");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM conversations");
$j = 0;
while($row = mysqli_fetch_array($result))
{
$carray[j] = $row['comment'];
$j++;
}
$comment = (array_pop($carray));
echo $comment;
echo "<br>";
mysqli_close($con);
JQuery的Ajax请求循环:
$(document).ready(function(e){
var comment;
function commentLoop() {
comment = $('#testdiv').load('update.php');
$('#testdiv').append(comment);
setTimeout(commentLoop, 6000);
}
commentLoop();
$(document).focus();
});
答
这将算在表中的意见和选择最后输入的注释,然后把它们传递给阿贾克斯json
数据仅在接收的计数大于表中的注释的计数低:
PHP:
if(isset($_GET['data']))
{
$con = new mysqli('host', 'user', 'password', 'database');
$init_count = $_GET['data'];
$stmt1 = "SELECT COUNT(*) AS count FROM conversations";
$stmt2 = "SELECT comment FROM conversations ORDER BY date_column DESC LIMIT 1";
$total = $con->prepare($stmt1);
$total->execute();
$total->bind_result($count);
$total->fetch();
$total->close();
if(($init_count != '') && ($init_count < $count))
{
$lastComment = $con->prepare($stmt2);
$lastComment->execute();
$result = $lastComment->get_result();
$row = $result->fetch_assoc();
$lastComment->close();
$data = array(
'comment' => $row['comment'],
'count' => $count
);
}
elseif($init_count == '')
{
$data = array(
'comment' => '',
'count' => $count
);
}
$pdo->close();
echo json_encode($data);
}
HTML:
<input type="hidden" id="count" value="" />
JQUERY:
$(document).ready(function(e){
function getComment(){
var count = $('#test').val();
$.ajax({
type: 'get',
url: 'update.php?data=' + count,
dataType: 'json',
success: function(data)
{
$('#count').val(data.count);
if(data.comment) != $('#testdiv').html(data.comment);
}
});
}
getComment();
setInterval(getComment, 6000);
});
答
的问题是这样做SELECT * FROM conversations
你不停地请求整个表 - 尽管你只需要最后一个。
您的代码需要记住加载了哪条评论,并且只能获得比此更新的评论。
例如,假设您的主键是增量式,请执行SELECT * FROM conversations WHERE convid > ?
。将?
替换为已加载的最新评论。如果您是第一次加载,只需做SELECT * FROM conversations
您可以将使用请求参数显示的最后评论ID传递到update.php
。此外,我再评JSON格式返回数据,所以你可以返回评论和id的集合,简单地分析它
答
SELECT * FROM conversations order by insert_date desc limit 10
insert_date日期时间注释被插入,我希望你能有一个字段用于存储,如果不加上现在
作为一个以前的答案已经指出,您的SQL返回表中的一切,但你遍历所有数据,只返回最后在你的回声中排。此外,您正在使用'$ _POST ['comment']',但没有任何内容被发布到脚本中。最重要的是,在您的AJAX中,您将页面加载到div中,然后将该加载的结果(它是一个非返回函数)附加到同一个div。所以,真的,这里有很多事情可能会出错。 – Jon 2013-04-09 23:22:01
我删除了$ _POST('comment')。这与我的错误没有任何关系。 – Emanegux 2013-04-09 23:28:53
您仍在选择表格中的所有内容,只将其中一个发送回AJAX呼叫。如果需要,可以使用会话或其他方法,以便知道上次加载的位置,然后将其包含在select语句中,以便选择实际要处理的正确数量的行并将它们全部输出AJAX。而且,每次运行'commentLoop()'时,您仍然会替换整个DIV。 – Jon 2013-04-09 23:31:22