JSON响应是逐个字符发送的?

时间:2017-04-18 06:58:57

标签: javascript c# jquery json datatable

在使用Razor和C#的MVC结构中,我试图将数据库中的数据显示为jquery DataTable。但是,我对数据表序列化和解释JSON数据的方式存在问题。

Javascript(在CSHTML页面上):

<script>
    $(document).ready(function () {        
        var validBarcode = @Model.ActiveBarcode.ToString();
        $('#example').DataTable({
            "ajax": {
                "url": '@Url.Action("ParseLogChangesData", "Article")',
                "dataSrc": '',
                "data": {barcode: barcode},
                "type":"POST"
            },
            "columns":  [
                {data: 'Header1'},
                {data: 'Header2'},
                {data: 'Header3'},
                {data: 'Header4'},
                {data: 'Header5'},
                {data: 'Header6'},
                {data: 'Header7'}
            ]
        });
});
</script>

ParseLogChangesData(在控制器中)

public ActionResult ParseLogChangesData(string barcode)
{
    if (barcode!= null && barcode!= "0")
    {
        Changelog log = new Changelog(barcode);
        string json = JsonConvert.SerializeObject(log);
        return Json(json, JsonRequestBehavior.AllowGet);
    }
    else
        return null;
}

日志对象是从对我的数据库的LINQ查询构造的。

ParseLogChangesData返回的“json”字符串包含一个格式化的对象列表:

  

“[{\” 头1 \ “:\” 值1 \ “\ ”头2 \“:\ ”值2 \“,\ ”Header3 \“:\ ”值3 \“ \ ”Header4 \“:\”值4 \ “\ ”Header5 \“:\ ”值5 \“,\ ”Header6 \“:\ ”Value6 \“,\ ”Header7 \“:\ ”Header7 \“},{\ ”头1 \“:\” VALUE1 \”,[...]}

根据该数据,我应该能够构建一个jquery DataTable,因为它似乎根据datatables.net上的示例正确格式化。

但是,如果我查看在浏览器中发送的响应(此处显示在Firefox中,但我对IE11有同样的问题,这是需要工作的): error in json

等等每个对象。

因此获得如此错误:

error ie10

因为当jquery.DataTables尝试完成它的工作时:

// Got the data - add it to the table
                    for ( i=0 ; i<aData.length ; i++ ) {
                        _fnAddData( settings, aData[i] );
                    }

aData.length是4976 ......它首先找不到“Header1”,但是“H”!

我可能会遗漏数据被序列化的方式,但我不知道它可能是什么。你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

更改ParseLogChangesData功能。替换:

string json = JsonConvert.SerializeObject(log);
return Json(json, JsonRequestBehavior.AllowGet);

使用:

return Json(log);