我一直在尝试使用ajax从数据库中检索新行。喜欢在facebook聊天中发生的那种事情。我一直在做的是我每隔两秒用ajax从数据库中获取最后十行,并尝试显示用户没有看到的那些行。我有两列,id和name。我创建了一个onordered列表,并将每个li元素id设置为数据库中的id。每个李是一排。然后我尝试获取最后一个li元素的id并检查数据库中的id是否更大,如果是,则添加包含id和name的新li。但由于某种原因,它只是每两秒附加整行10行。我做错了什么? 这是我正在使用的代码。
<ol id="output"><li id="1">test</li></ol>
<script id="source" language="javascript" type="text/javascript">
function reloadw()
{
$.ajax({
url: 'api.php',
data: "",
dataType: 'json',
success: function(rows)
{
for (var i in rows)
{
var row = rows[i];
var lastId = $('ol#output li').attr('id');
var id = row[0];
var vname = row[1];
if(id > lastId){
$('#output').append("<li id="+id+"><b>id: </b>"+id+"<b> name: </b>"+vname+"</li>");
}}
}
});
} setInterval(reloadw,2000);
这是我从db
中检索数据时使用的$result = mysql_query("SELECT * FROM $tableName ORDER BY id");
$data = array();
for($i=0;$i<=9;$i++){
$row = mysql_fetch_row($result);
$data[] = $row;
}
echo json_encode( $data );
答案 0 :(得分:1)
如果您在获取数据时遇到问题,则您的另一个问题是在您的javascript代码中。
更改
var lastId = $('ol#output li').attr('id'); //will always fetch the first li's id
到
var lastId = $('ol#output li:last').attr('id');
使用您拥有的lastId
选择代码,它将始终仅获取第一个的ID,并且除了第一个元素的ID之外,您的比较id > lastId
将始终为true。因此,即使之前已添加该记录,您最终也会附加。
但理想情况下,您应该在服务器上执行此逻辑以仅获取要呈现的数据。
答案 1 :(得分:0)
如果要对数据库中的最后结果进行排序,这非常简单,您可以在sql中尝试以下代码:$result = mysql_query("SELECT * FROM $tableName ORDER BY id DESC");
答案 2 :(得分:0)
var lastId = $('ol#output li').attr('id');
该行将始终查找列表中的 first 元素,而您可能正在查找最后一行。尝试用以下代码替换该行:
var lastId = $('ol#output li').last().attr('id');
答案 3 :(得分:0)
您可以像这样编写JavaScript代码。
<script>
var seen = new Array();
function reloadw(){
$.ajax({
url: 'api.php',
data: "",
dataType: 'json',
success: function(rows){
rows.forEach(function(row){
if(seen.indexOf(row.id) == -1){
$('#output').append("<li id="+row.id+"><b>id: </b>"+row.id+"<b> name: </b>"+row.name+"</li>");
seen.push(row.id);
}
});
} setInterval(reloadw,2000);
</script>