2017-03-16 36 views
1

我使用的是帶有VB代碼的jQuery DataTables。我正在嘗試編寫一個自定義的Excel導出,因爲內置的Excel導出功能不適用於大型數據集。jQuery DataTables循環引用錯誤

另外,我想導出已經在搜索框中過濾的行。

JS:

excelExport: function() { 
      var table = $('#myTable').DataTable(); 

      //filtered rows data as arrays 
      var filteredData = table.rows({ filter: 'applied' }).data(); 

      PageMethods.ExcelExport(filteredData);    
     } 

filteredData輸出到控制檯,這樣的:

[ Array[20], Array[20], Array[20],...] 

這似乎喜歡的事,我可以工作。當我嘗試使用PageMethods傳遞對象返回給服務器端我得到這個可怕的錯誤:

Uncaught Error: Sys.InvalidOperationException: Cannot serialize object with cyclic reference within child properties.

然後我試圖傳遞filteredData通過JSON.stringify,並得到了類似的錯誤:

Uncaught TypeError: Converting circular structure to JSON

有沒有人穿越這個或有任何想法如何解決這個問題?到目前爲止,我的研究還沒有提出解決方案。

或者是否有更好的方法來處理這些jQuery數據表的導出,這些數據表適用於更大的數據集?

+0

這聽起來在你的過濾對象中存在的不僅僅是數據。當我嘗試使用JSON.stringify和包含一個函數的對象時,我發現錯誤。 – Bindrid

+0

@Bindrid謝謝你的洞察力。在這種情況下,這不是問題。我在下面發表了我的發現。 – Scott

回答

0

我想清楚我的問題是什麼。基於Bindrid的評論,我將我的查詢簡化爲一列id來測試他的理論。我仍然收到循環引用錯誤。然後我開始剝離額外的jQuery數據表函數。

我的表格定義或多或少如下。

table = $('#myTable').dataTable({ 

        "bSortClasses": false, 
        "ajax": { 
         "type": "POST", 
         "url": "/page.aspx/FillTable", 
         "data": {}, 
         "contentType": "application/json; charset=utf-8", 
         "dataSrc": "d",       
         "error": function (result) { 
          // write the error to the console otherwise. 
          console.log(result.responseJSON.Message + "\n\r\n\r" + result.responseJSON.StackTrace); 
         } 
        }, 
        "dom": "<'row'<'col-md-3'l><'col-md-6'><'col-md-3'f>>" + 
           "<'row'<'col-md-12't>>" + 
           "<'row'<'col-md-6'i><'col-md-6'p>>",  
        }, 
        "order": [[2, "asc"]],     
        "columnDefs": [ 
        { 
         "targets": [1], 
         "title": "unique", 
         "visible": false, 
         "searchable": false      
        }], 
        scrollX: true, 
        scrollCollapse: true,      
        fixedColumns: { 
         leftColumns: 3 
        }, 
        iDisplayLength: 10, 
        initComplete: function (settings, json) { 
         console.log('DataTable has finished initialization.');      
        } 
       }); 
      } 

fixedColumns: { leftColumns: 3 },就是從原來的職位引起的導出函數的週期誤差。一旦這些行被刪除,導出將數據無誤地傳遞給代碼。

我希望這可以幫助未來的人。