【问题标题】:Error when laoding datatable from JSON从 JSON 加载数据表时出错
【发布时间】:2017-09-29 17:58:20
【问题描述】:

我正在开发一个项目,我在其中使用数据表和从我的服务器返回的 JSON 填充 HTML 表,该 JSON 最初是一个类的列表。

每个元素的代码如下:

表格 HTML:

<table id="tablaDetalle2" class="display" role="grid" aria-describedby="example2_info">
    <thead>
        <tr>
            <th>id</th>
            <th>idFlight</th>
            <th>idSample</th>
            <th>import</th>
        </tr>
    </thead>
    <tbody>
</table>

Javascript:

$('#tablaDetalle2').DataTable({
    "bProcessing": true,
    "sAjaxSource": "@Url.Action("Detalle","Muestra", new {idExp = 1, descrExp="abc"})"
});

服务器代码:

public ActionResult Detalle(int idExp, string descrExp)
{
    List<Models.Muestra_Detalle> aaData = new List<Models.Muestra_Detalle>(); //Returns a list of the data
    aaData = Manager.MuestraManager.Cargar_Detalle(idExp);
    var jsonSerializer = new JavaScriptSerializer();
    var JsonFinal = jsonSerializer.Serialize(aaData);

    try
    {
        return Json(new { JsonFinal }, JsonRequestBehavior.AllowGet);

    }
    catch (Exception ex)
    { return null; }
}

JsonFinal 返回的对象结构如下:

[{"id":"1","idFlight":1,"idSample":3217.5,"import":0}]

但我收到以下错误:

Unhandled exception at line 188, column 47 in 
http://localhost:61298/Content/DataTables/jquery.dataTables.min.js

0x800a138f - JavaScript runtime error: Unable to get property 'length' of undefined or null reference

例如,如果我声明一个硬编码变量:

var data = new[] { "id:A", "idFlight:B", "idSample:C", "import:D" };

即使变量数据中定义的内容与表格中的显示方式不匹配,也不会出现错误。

我已经尝试了很多方法来做到这一点,有人说它只是没有数据可以显示在表格中,这似乎是解决问题后最好的方法。

硬编码一个返回给datatables的变量最大的区别是变量data是一个有4个不同字符串的对象,而使用JsonSerializer的结果就跟一个字符串一样,我不太清楚。

日期

将 JsonFinal 重命名为 aaData,一些错误不同的弹出窗口,将尝试你们中的一些人所说的并报告更多详细信息。

来自服务器的新代码:

public ActionResult Detalle(int idExp, string descrExp)
    {
        ViewBag.Exp = descrExp;
        List<Models.Muestra_Detalle> azaData = new List<Models.Muestra_Detalle>();
        aaData = Manager.MuestraManager.Cargar_Detalle(idExp);
        var jsonSerializer = new JavaScriptSerializer();
        var aaData = jsonSerializer.Serialize(azaData);
        //string data2 = JsonFinal.Replace("\\", "");

            //var data = new[] { "id:A", "idgasto:B", "ImpGasto:C", "idMuestra:D" };
            return Json(new { aaData }, JsonRequestBehavior.AllowGet);


    }

新错误:DataTables 警告:表 id=tablaDetalle2 - 请求第 0 行第 0 列的未知参数“id”。有关此错误的详细信息,请参阅https://datatables.net/tn/4

已经过去了,什么都弄不出来。

就像在返回的JSON中找不到列id一样,因为它在表中变为null。

【问题讨论】:

    标签: javascript json asp.net-mvc datatable


    【解决方案1】:

    尝试不使用序列化程序直接返回您的 json 对象。例如

    public ActionResult Detalle(int idExp, string descrExp)
    {
        List<Models.Muestra_Detalle> aaData = new List<Models.Muestra_Detalle>(); //Returns a list of the data
        aaData = Manager.MuestraManager.Cargar_Detalle(idExp);
    
        try
        {
            return Json(aaData , JsonRequestBehavior.AllowGet);
    
        }
        catch (Exception ex)
        { return null; }
    }
    

    【讨论】:

    • 您好 Charan,感谢您的回答,现在返回的对象是一个类型列表,错误是相同的:0x800a138f - JavaScript 运行时错误:无法获取未定义或空引用的属性“长度”。请在 5 分钟内查看我的更新。
    【解决方案2】:

    好吧,我仍然没有根据 JSON 信息正确呈现表格,但我设法解决了这个问题......

    我使用 sAjaxSource 的方法必须从名为 aaData 的服务器端返回对象 JSON,现在我遇到了一个问题,因为无论我向客户端发送什么,它总是取值为 " 和其余列为空,但会为此提出另一个问题。

    【讨论】:

      猜你喜欢
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 2016-03-28
      • 1970-01-01
      相关资源
      最近更新 更多