Для раннего выхода из цикла при обновлении измененных или новых записей в таблице datatable.net - PullRequest
1 голос
/ 06 марта 2012

Я использую плагин Datatables jQuery.Таблица извлекает данные из источника AJAX (запрос SQL Server, обработанный ASP.NET в объект JSON).Я хочу создать живое представление таблицы, чтобы изменения отображались в реальном времени.Но вместо того, чтобы перезагружать всю таблицу каждые несколько секунд с помощью 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);
                    }                                         
                }
            }
        }

Моя проблема в том, что, хотя свойство newData.length первого цикла for может быть больше 1, цикл for завершается рано (после одной итерации).В конце я добавил оператор console.log, и он начал передавать ошибки о том, что newData[i].serial не определен.Это заставляет меня думать, что весь массив newData был уничтожен или что-то в этом роде ...

Я действительно надеюсь, что только что допустил глупую ошибку (хотя я проверял и проверял и проверял еще несколько, но могуне найти один).Может быть, я что-то упускаю из виду.Если у кого-нибудь есть какой-либо совет, он будет очень признателен.

1 Ответ

1 голос
/ 06 марта 2012

Кредит идет на @elclarnrs для решения, размещенного выше в комментариях. Решением было объявить значения i и ii в области действия функции. Это все работает гладко. Полезно знать для дальнейшего использования.

...