我正在使用AJAX进行自动更新信息表,但我遇到了一个障碍。我正在使用PHP在每个请求上返回一个JSON对象,其中包含以下格式的数据:
({
"table": {
"544532": {
"field1": "data",
"field2": "data2",
"field3": "data3",
.....
},
"544525": {
"field1": "data",
"field2": "data2",
"field3": "data3",
.....
},
......
}
}); //
我使用Prototype.js将ID列表导入数组:
var ids = Object.keys(data.table).sort();
但是,表的随机行可以随时从列表中消失,并且可以随时将新行添加到结尾。我假设我将存储上一个请求中的ID数组并将其与新数组进行比较,但由于随机行可以消失,从而在此之后移动ID,如何比较这些以便我只能添加新行或从页面中删除已删除的行?
答案 0 :(得分:2)
不幸的是,Prototype不包含Set类型,这会使事情变得更加简单。所以我们必须做到这一点:
Array.prototype.subtract = function(a){
return this.reject(this.include.bind(a));
}
以上添加了急需的subtract
功能。我们可以像这样使用它:
added_ids = new_ids.subtract(old_ids);
removed_ids = old_ids.subtract(new_ids);
由于某些浏览器支持Prototype的indexOf
检查和使用的include
,因此速度也不会太慢。
<子> PS。数组已经有一个intersect
函数,如果你想要一个complement
,那么......
Array.prototype.complement = function(a){
return a.reject(this.include.bind(this));
}
基本上a.subtract(b)
与b.complement(a)
相同。
答案 1 :(得分:0)
我确定有更好的方法可以做到这一点 - 但是您需要存储表格中显示的行 - 可能是数组 - 然后循环JSON对象,将行与数组进行比较。
答案 2 :(得分:0)
更新表时应更新JSON数据结构。那将是页面的数据模型。然后,您可以在每次需要时致电Object.keys(data.table)
。