我使用的是Datatables jQuery插件。该表从AJAX源( SQL Server查询,由ASP.NET处理为JSON对象)中提取数据。我想创建表格的实时视图,以便实时显示更改。但是,我使用fnAddData()和fnUpdate()只更新新的或修改过的记录,而不是每隔几秒钟使用fnReloadAjax()重新加载整个表(根据经验,这在浏览器上是相当繁重的)。
在仅获得新的或修改的记录的JSON对象之后,下面是我处理该对象的代码。
var newData = updatedDataJSON.aaData;
if (newData[0] != null) {
for (i = 0; i < newData.length; i++) { //Loop through each object
if (newData[i].bNewCase === true) { //Process new cases
oTable.fnAddData(newData[i]);
} else { //Process modified cases
var tableArray = oTable.fnGetData();
var index;
var found = false;
var serial = newData[i].serial;
var dataObject = newData[i];
//First gotta find the index in the main table for
// the record that has been modified. This is done
// by matching the serial number of the newData
// object to the original aData set:
for (ii = 0; ii < tableArray.length; ii++) {
var value = tableArray[ii]['serial'];
value = value.replace(/<\/?[^>]+(>|$)/g, "");
if (value === serial) {
index = ii;
found = true;
}
}
if (found) {
oTable.fnUpdate(dataObject, index);
console.log('Updated ' + newData[i].serial);
}
}
}
}我的问题是,即使第一个for循环的newData.length属性可能大于1,for循环也会提前退出(在一次迭代之后)。我在最后添加了console.log语句,它开始传递错误,指出newData[i].serial是未定义的。这让我觉得整个newData数组都被销毁了。
我真的希望我犯了一个愚蠢的错误(尽管我检查了一遍又一遍,但还是找不到)。也许我忽略了什么。如果任何人有任何建议,将不胜感激。
发布于 2012-03-06 19:46:48
在上面的评论中发布的解决方案归功于@elclarnrs。解决方案是在函数的作用域中声明i和ii的值。这让一切都很顺利。很高兴知道这一点,以便将来参考。
https://stackoverflow.com/questions/9575813
复制相似问题