你好我想创建一个html表并通过json实时填充行,并通过php / mysql添加数据库中的新信息,如下所示:
php代码:
$res = mysql_query("select * from generalTabl");
while($row = mysql_fetch_array($res))
{
$arr[] = $row;
}
echo '{"Info1":'.json_encode($arr).'}';
jquery代码:
function getData(){
var url = "/json.php";
$.getJSON(url, function(jsonData) {
$.each(jsonData.Info1, function(nr,jsonData){
$("#tt").append('<tr>' +jsonData.titlu+'</tr>')
})
})
}
setInterval("getData()" ,1000);
以及如何仅使用数据库中的新信息进行填充
并且问题是每次setInterval fireup函数添加新行而不是仅在信息是新的时添加行
答案 0 :(得分:1)
在循环内部,使用data2
代替jsonData
$.each(jsonData.Info1, function(nr,data2){
$("#tt").append('<tr>' +data2.titlu+'</tr>')
})
假设您从服务器获取的JSON数据具有名为Info1
的属性,并且其中包含一个名为titlu
的属性的集合。
要仅附加新项目,您可以检查记录ID(可能是表中的唯一主键),以查看列表/表中是否已存在。如果没有,请追加。
答案 1 :(得分:0)
首先,关于现有代码的一些注释。
首先,您使用Info1
密钥完全是多余的。将PHP的最后一行更改为:
echo json_encode($arr);
然后在您的jQuery中将$.each
行更改为:
$.each(jsonData,function() {
请注意,我已删除了函数的参数,因为您似乎没有使用它们。
接下来,在你的循环中,你反复调用原始对象的titlu
属性,这可能不是你想要的。用这个替换循环的内容:
$("#tt").append("<tr>"+this.titlu+"</tr>");
最后,您应 从不 将字符串传递给setTimeout
或setInterval
。在这种情况下,它特别糟糕,因为您需要做的就是使用setInterval(getData,1000);
。
有了这个,我建议确保每一行都有一个ID。然后,当你附加到你的桌子时,尝试这样的事情:
if(!document.getElementById("row"+this.id))
$("#tt").append("<tr id='row"+this.id+"'>"+this.titlu+"</tr>");