【问题标题】:Jquery datatable server side processing erroring on json serialization for large datasets大型数据集的 json 序列化的 Jquery 数据表服务器端处理错误
【发布时间】:2014-11-19 01:07:09
【问题描述】:

在返回超过 40,000 条记录的 web 服务的 web.config 中,我为 json 序列化设置了 maxlength

<system.web.extensions>
   <scripting>
      <webServices>
         <jsonSerialization maxJsonLength="50000000"/>
      </webServices>
   </scripting>
</system.web.extensions>
function BindInfoDataTableServerSide() 
{
    var oTable = $('#example').dataTable({
        "sScrollY": "250px",
        'bPaginate': true,
        "bProcessing": true,
        "bFilter": false,
        "bServerSide": true,
        //"aoColumns": [null, null, { "bSortable": false }, { "bSortable": false}, null, null, null, null],
       /* "aoColumns": [
                { "sTitle": "ScreenId" },
                { "sTitle": "RunId" },
                { "sTitle": "RecordType" },
                { "sTitle": "TrackerKey" },
                { "sTitle": "SeqNo" },
                { "sTitle": "TRSeqNo" },
                { "sTitle": "TestParam" },
                { "sTitle": "ParamValue" },
            ]
        ,*/
        "sAjaxSource": "../SocWebService.asmx/LoadMidasData",
        "sAjaxDataProp": "aaData",
        "fnServerData": function (sSource, aoData, fnCallback) { GrabData(sSource, aoData, fnCallback); }
    });

}

function GrabData(sSource, aoData, fnCallback) {

    $.ajax({
        type: "POST",
        url: sSource,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: "",
        success: function (result) {
            var  myObject = JSON.parse(result.d);

            fnCallback(myObject);
            //fnCallback(result.d);
        },
        error: function (errMsg) {
            alert(errMsg);
        }
    });

}

但是当记录达到 50,000 条时,我会遇到以下错误

在使用 JSON JavaScriptSerializer 进行序列化或反序列化期间。字符串的长度超过了 maxJsonLength 属性上设置的值。 Jquery 数据表网站声称它们可以显示 100 万条记录。我错过了什么吗?

【问题讨论】:

标签: jquery-datatables


【解决方案1】:

将服务器端处理与 DataTables 一起使用的主要思想是,服务器只返回当前在浏览器中显示所需的行(如用户页面和排序等) - 所以虽然实际上可能有 1百万条记录,只有一小部分应该由 Web 服务调用返回,因此不应超过 ajax 限制。

通过这种方式,客户端保持良好和快速,繁重的工作在服务器上完成(或者可能在数据库中,取决于您生成数据的方式)。

【讨论】:

  • 我没有找到一个很好的例子来说明如何返回显示所需的行。正如您在下面的代码中看到的那样,每次进行服务器端调用时,我都会返回所有数据。这是在征税。您能否建议在服务器上对数据进行分页并发送该数据的方法。 var wrapper = new FooWrapper() { sEcho = 0, iTotalRecords = dt.Rows.Count, iTotalDisplayRecords = dt.Rows.Count, aaData = jsDT.aaData, aoColumns = jsDT.aoColumns };返回包装器;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
相关资源
最近更新 更多