Javascript 更新datatable.net表中的修改记录或新记录时,For循环提前退出
我正在使用Datatables jQuery插件。该表从AJAX源(一个SQL Server查询,由ASP.NET处理为JSON对象)提取数据。我想创建表的实时视图,以便实时显示更改。但是,我不是每隔几秒钟用Javascript 更新datatable.net表中的修改记录或新记录时,For循环提前退出,javascript,jquery,for-loop,jquery-datatables,Javascript,Jquery,For Loop,Jquery Datatables,我正在使用Datatables jQuery插件。该表从AJAX源(一个SQL Server查询,由ASP.NET处理为JSON对象)提取数据。我想创建表的实时视图,以便实时显示更改。但是,我不是每隔几秒钟用fnReloadAjax()(根据经验,这在浏览器上已经证明是相当麻烦的)重新加载整个表,而是使用fnAddData()和fnUpdate()更新新的或修改的记录 在获得一个只包含新记录或修改记录的JSON对象后,下面是我处理该对象的代码 var newData = upda
fnReloadAjax()
(根据经验,这在浏览器上已经证明是相当麻烦的)重新加载整个表,而是使用fnAddData()
和fnUpdate()
更新新的或修改的记录
在获得一个只包含新记录或修改记录的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);
}
}
}
}
var newData=updatedDataJSON.aaData;
如果(newData[0]!=null){
对于(i=0;i|$)/g,“”;
如果(值===串行){
指数=ii;
发现=真;
}
}
如果(找到){
FNDUpdate(数据对象、索引);
console.log('Updated'+newData[i].serial);
}
}
}
}
我的问题是,即使第一个for循环的newData.length
属性可能大于1,for循环也会提前退出(经过一次迭代)。我在末尾添加了console.log
语句,它开始传递错误,指出newData[I].serial
未定义。这让我觉得整个newData数组都被破坏了或是什么
我真的希望我刚刚犯了一个愚蠢的错误(虽然我检查了又检查了又检查了一些,但找不到一个)。也许我忽略了什么。如果有人有任何建议,我们将不胜感激。以上评论中公布的解决方案归功于@elclarnrs。解决方案是在函数范围内声明
i
和ii
的值。这使一切顺利进行。很高兴知道,以备将来参考。该解决方案归功于@elclarnrs,在上面的评论中发布。解决方案是在函数范围内声明i
和ii
的值。这使一切顺利进行。很高兴知道,以备将来参考。如何将value=tableArray[ii]['serial']
更改为value=tableArray[ii]。serial
?也许是范围问题?除非i
和ii
在其他地方声明,否则它们应该在该函数的范围内声明,因此for(var ii=0).
var newData=updatedDataJSON.aaData在哪里代码>来自哪里?听起来您正在访问ajax回调之外的数据,而ajax是asynchronous@elclanrs您的解决方案完全有效(这是声明i
和ii
的范围问题)@charlietfl数据是从$.ajax
请求中提取的,是的,它是异步的。我正在使用.responseText
属性访问回调外部的数据。这是一种不好的做法吗(还有其他选择吗)?谢谢你们两位的帮助!将value=tableArray[ii]['serial']
更改为value=tableArray[ii].serial怎么样?也许是范围问题?除非i
和ii
在其他地方声明,否则它们应该在该函数的范围内声明,因此for(var ii=0).
var newData=updatedDataJSON.aaData在哪里代码>来自哪里?听起来您正在访问ajax回调之外的数据,而ajax是asynchronous@elclanrs您的解决方案完全有效(这是声明i
和ii
的范围问题)@charlietfl数据是从$.ajax
请求中提取的,是的,它是异步的。我正在使用.responseText
属性访问回调外部的数据。这是一种不好的做法吗(还有其他选择吗)?谢谢你们两位的帮助!