1

我一直在尝试使用 ajax 从数据库中检索新行。就像在 facebook 聊天中发生的事情一样。我一直在做的是每两秒使用 ajax 从数据库中获取最后十行,并尝试显示用户没有看到的行。我有两列,id 和 name。我创建了一个有序列表并将每个 li 元素 id 设置为数据库中的 id。每个 li 代表一行。然后我尝试获取最后一个 li 元素的 id 并检查数据库中的 id 是否更大,如果是则附加一个包含 id 和名称的新 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);

这是我在从数据库中检索数据时使用的

$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 );
4

4 回答 4

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 > lastId将始终为真,除了第一个元素的 id。因此,即使之前已经添加了该记录,您最终也会追加。

但理想情况下,您应该在服务器上执行此逻辑以仅获取要呈现的数据。

于 2013-09-23T00:17:29.773 回答
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>
于 2013-09-23T01:02:28.803 回答
0

如果要对数据库中的最后一个结果进行排序,这非常简单,您可以在 sql 中尝试以下代码:$result = mysql_query("SELECT * FROM $tableName ORDER BY id DESC");

于 2013-09-23T00:23:09.877 回答
0
var lastId = $('ol#output li').attr('id');

该行将始终查找列表中的第一个元素,而您可能正在查找最后一个元素。尝试将行替换为:

var lastId = $('ol#output li').last().attr('id');
于 2013-09-23T00:33:20.260 回答