-2

你好,我想制作一个 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 启动函数时添加新行而不是仅当信息是新的时才添加行

4

2 回答 2

1

在循环内部,使用data2代替jsonData

$.each(jsonData.Info1, function(nr,data2){
    $("#tt").append('<tr>' +data2.titlu+'</tr>')
})

假设您从服务器获取的 JSON 数据有一个名为的属性Info1,并且它有一个集合,其中包含一个名为的属性titlu

要仅附加新项目,您可以检查记录 ID(可能是表中的唯一主键)以查看列表/表中是否已存在。如果没有,请追加。

于 2013-03-07T15:18:44.927 回答
0

对于初学者,请对您现有的代码做一些说明。

首先,您对Info1密钥的使用完全是多余的。将 PHP 的最后一行更改为:

echo json_encode($arr);

然后在您的 jQuery 中将您的$.each行更改为:

$.each(jsonData,function() {

请注意,我已经删除了函数的参数,因为您似乎没有使用它们。

接下来,在您的循环中,您反复调用原始 objecttitlu属性,这可能不是您想要的。用这个替换循环的内容:

$("#tt").append("<tr>"+this.titlu+"</tr>");

最后,您永远不应该将字符串传递给setTimeoutor setInterval。在这种情况下,它尤其糟糕,因为您需要做的就是使用setInterval(getData,1000);.


有了这个,我建议确保每一行都有一个 ID。然后,当附加到您的表时,请尝试以下操作:

if(!document.getElementById("row"+this.id))
    $("#tt").append("<tr id='row"+this.id+"'>"+this.titlu+"</tr>");
于 2013-03-07T15:20:30.960 回答