简体   繁体   English

将JSON字符串转换为JSON对象,因此无需在基本jquery.dataTables.js中进行更改

[英]Convert JSON string to JSON object so I don't need to change in the base jquery.dataTables.js

I'm using ASP.net MVC on the server side. 我在服务器端使用ASP.net MVC。 Basically I have a model class, I normally JsonConvert.SerializeObject(DataTableModel) and send it back to datatables.js . 基本上,我有一个模型类,通常是JsonConvert.SerializeObject(DataTableModel)并将其发送回datatables.js After the conversion the json data looks like the following; 转换后,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"}
        ]
}"

It gets the data alright. 它可以使数据正常。 But if I don't convert it to in jquery.dataTables.js >> _fnBuildAjax.baseAjax >> success into the following (between line 9 - 15) it doesn't show data; 但是,如果我不将其转换为jquery.dataTables.js >> _fnBuildAjax.baseAjax >> success转换为以下内容(between line 9 - 15) _fnBuildAjax.baseAjax (between line 9 - 15) ,则不会显示数据; gets an error can't find lenght of undefined , which I get. 得到一个错误,找不到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 );
        }
    };

Following are my js code binding with datatables. 以下是我的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" }           
    ]
});

In the ajax part I've tried with dataSrc as well, didn't work. ajax部分中,我也尝试过使用dataSrc ,但没有用。

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

My question, is there any builtin extender to do that, or perhaps how can I make a prototype like thing for this? 我的问题是,有没有内置的扩展器可以做到这一点,或者我该如何制作类似这样的原型? I thank you in advance. 我提前谢谢你。

This is exactly the purpose of dataSrc . 这正是dataSrc的目的。 It is not working because you are expected to return an array of items, ie data : 它不起作用,因为您需要返回一个项目数组 ,即data

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM