Jquery json添加新行

时间:2013-03-07 15:14:37

标签: php javascript jquery

你好我想创建一个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函数添加新行而不是仅在信息是新的时添加行

2 个答案:

答案 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>");

最后,您应 从不 将字符串传递给setTimeoutsetInterval。在这种情况下,它特别糟糕,因为您需要做的就是使用setInterval(getData,1000);


有了这个,我建议确保每一行都有一个ID。然后,当你附加到你的桌子时,尝试这样的事情:

if(!document.getElementById("row"+this.id))
    $("#tt").append("<tr id='row"+this.id+"'>"+this.titlu+"</tr>");