【发布时间】:2013-04-09 23:09:09
【问题描述】:
我正在尝试通过 ajax 提取 mysql 表的最新条目并将其显示为 div 内的 html 内容。我的 ajax 和 php 运行正常,我唯一的问题是我想查询新条目并在循环内按时间间隔堆叠结果,我遇到了两个问题:让数据表现得像一个正常的javascript 字符串,并让循环只返回唯一的条目。
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();
});
【问题讨论】:
-
正如前面的答案所述,您的 SQL 返回表中的所有内容,但随后您遍历所有数据并仅返回回显中的最后一行。此外,您正在使用
$_POST['comment'],但没有任何内容发布到脚本中。最重要的是,在您的 AJAX 中,您将页面加载到 div 中......然后将该加载的结果(它是一个非返回函数)附加到同一个 div。所以说真的,这里有很多事情可能对你不利。 -
我删除了 $_POST('comment')。这与我的错误无关。
-
您仍在选择表中的所有内容,并且只将其中一个发送回 AJAX 调用。如果需要,请使用会话或其他方法,以便您知道上次加载它时离开的位置,然后将其包含在 select 语句中,以便您选择实际想要处理的正确行数并将它们全部输出以供您使用阿贾克斯。此外,每次运行
commentLoop()时,您仍在替换整个 DIV。 -
@jon 循环仅使用常规字符串。是什么让将 js 注释变量设置为回显的 php 字符串不同? jsfiddle.net/CaJ2D
-
看
.load()函数,它将内容放入div中,替换它。保存变量comment没有任何作用。
标签: php javascript jquery html ajax