javascript - 将 JSON 字符串转换为 JSON 对象,这样我就不需要更改基础 jquery.dataTables.js

标签 javascript jquery json ajax datatables

我在服务器端使用 ASP.net MVC。基本上我有一个模型类,我通常 JsonConvert.SerializeObject(DataTableModel) 并将其发送回 datatables.js。转换后的 json 数据如下所示;

"{
"draw":1,
"recordsTotal":2,
"recordsFiltered":2,
"data":[
             {"PONumber":"PO 1234","SupplierNumber":"SUP 123","SupplierName":"Supplier 1","ProductDescription":"SUND Salt & Pep Grinder 6/210g","POQuantity":"6","POUOM":"12","BatchQuantity":"18","BatchUOM":"24","ShelfDate":"2016/02/24","ExpireDate":"2016/03/15","CreatedDate":"2016/02/23","CreatedBy":"HORIZON.COM\\mohammadi","POReceiveDate":"2016/02/20","Notes":"Note 1"},
             {"PONumber":"PO 1236","SupplierNumber":"SUP 124","SupplierName":"Supplier 2","ProductDescription":"365 Cinnamon Strick Whol 6/36g*","POQuantity":"6","POUOM":"12","BatchQuantity":"18","BatchUOM":"24","ShelfDate":"2016/02/25","ExpireDate":"2016/03/31","CreatedDate":"2016/02/23","CreatedBy":"HORIZON.COM\\mohammadi","POReceiveDate":"2016/02/25","Notes":"Note 2"}
        ]
}"

它获取数据正常。但如果我不将其转换为 jquery.dataTables.js>> _fnBuildAjax.baseAjax >> success 到以下 (第 9 - 15 行之间) 它不显示数据;收到错误 can't find lenght of undefined,我得到了。

    var baseAjax = {
        "data": data,
        "success": function (json) {
            var error = json.error || json.sError;
            if ( error ) {
                _fnLog( oSettings, 0, error );
            }

            var x = JSON.parse(json);
            oSettings.json = x;
            callback(x);

            //oSettings.json = json;
            //callback( json );
        },
        "dataType": "json",
        "cache": false,
        "type": oSettings.sServerMethod,
        "error": function (xhr, error, thrown) {
            var ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );

            if ( $.inArray( true, ret ) === -1 ) {
                if ( error == "parsererror" ) {
                    _fnLog( oSettings, 0, 'Invalid JSON response', 1 );
                }
                else if ( xhr.readyState === 4 ) {
                    _fnLog( oSettings, 0, 'Ajax error', 7 );
                }
            }

            _fnProcessingDisplay( oSettings, false );
        }
    };

以下是我与数据表绑定(bind)的js代码。

 var table = $('#example').DataTable({

    "processing": true,
    "serverSide": false,
    "ajax": {
        "url": "/Home/GetDateLogData",
        "type": "POST"            
    },

    "columns": [
        { "data": "PONumber" },
        { "data": "SupplierNumber" },
        { "data": "SupplierName" },
        { "data": "ProductDescription" },
        { "data": "POQuantity" },
        { "data": "POUOM" },
        { "data": "BatchQuantity" },
        { "data": "BatchUOM" },
        { "data": "ShelfDate" },
        { "data": "ExpireDate" },
        { "data": "CreatedDate" },
        { "data": "CreatedBy" },
        { "data": "POReceiveDate" },
        { "data": "Notes" }           
    ]
});

ajax部分我也尝试过dataSrc,但没有成功。

"dataSrc": function ( json ) {
  var x = JSON.parse(json);
  return x;
},

我的问题,是否有任何内置扩展程序可以做到这一点,或者我如何为此制作类似原型(prototype)的东西?我提前谢谢你。

最佳答案

这正是 dataSrc 的目的。它不起作用,因为您需要返回一个数组项目,即数据:

dataSrc: function ( json ) {
  json = JSON.parse(json);
  return json.data; 
},

PS:为什么"type": "POST"

关于javascript - 将 JSON 字符串转换为 JSON 对象,这样我就不需要更改基础 jquery.dataTables.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35586760/

相关文章:

javascript - 访问控制允许来源 - 不工作

javascript - 如何停止函数内部的 Ajax 调用

javascript - 从表中获取选定的复选框值并将这些值传递到 ajax

json - Jackson:是否可以用 @JsonSerialize 注释(例如,用 ObjectMapper)替换序列化器集?

python - 如何解析txt文件末尾的json格式文本

javascript - 自定义 jQuery totemticker 插件

javascript - 游戏循环 requestAnimFrame (javascript/canvas)

javascript - 如何在 JS/jQuery 中正确显示 php 服务器时间和时区,与用户位置无关?

jquery - 如何根据其父级的宽度和高度设置FontAwesome图标的宽度、高度和位置?

javascript - VueJS + Electron 创建 debian 安装程序不起作用(electron-installer-debian)