1

Datatables jQuery プラグインを使用しています。テーブルは、AJAX ソース (ASP.NET によって JSON オブジェクトに処理された SQL Server クエリ) からデータを取得しています。変更がリアルタイムで表示されるように、テーブルのライブ ビューを作成したいと考えています。しかし、数秒ごとにテーブル全体をリロードするのではなく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 ループが (1 回の反復後に) 早期に終了することです。最後にステートメントを追加すると、未定義console.logであるというエラーが発生し始めました。newData[i].serialこれは、 newData 配列全体が破壊されたか何かだと思います...

ばかげた間違いを犯したことを本当に望んでいます(ただし、チェックしてチェックしてさらにチェックしましたが、見つけられませんでした)。たぶん、私が見落としているものがあります。誰かアドバイスがあれば、大歓迎です。

4

1 に答える 1

1

クレジットは、上記のコメントに投稿されたソリューションの @elclarnrs に送られます。解決策は、関数のスコープ内でiとの値を宣言することでした。iiこれにより、すべてがスムーズに機能しました。今後の参考のために知っておくとよいでしょう。

于 2012-03-06T11:46:48.093 に答える