【问题标题】:jQuery DataTables with Node.js带有 Node.js 的 jQuery 数据表
【发布时间】:2015-08-30 10:30:29
【问题描述】:

所以我正在尝试使用 datatables 插件实现一个分页表,这是我第一次使用这个插件。我按照插件文档中的文档进行操作,并尝试通过使用 Ajax 从服务器获取值,如插件文档中所述。

一旦我提出 get 请求,我似乎收到以下错误,但我不确定为什么?

错误:未捕获的类型错误:无法读取未定义的属性“长度”

在客户端我有以下代码

viewReports = {
    init: function(){
        $('#paginatedData').DataTable({
            "processing": true,
            "serverSide": true,
            "ajax": '/viewreports'
        });

    }
};

$(document).ready(viewReports.init);

在我的服务器端,我有以下内容

router.get('/viewreports', function(res, req){

    async.parallel({
        viewReports: function(callback){
            restCall('/rest/bugbounty/latest/message/searchReport', 'POST', parameters, function(data){
                callback(null, data);
            }); 
        }
    }, function(err, result){
        if(!err){
            res.send(result.viewReports);
            res.render('viewreports');
        }
    });
});

返回的 JSON:

{ reportList: [ { reportID: 'EIBBP-448', eBayUserID: ' ', reportStatus: 'New', summary: 'BugBounty Report created by Raj', lastUpdatedDate: '2015-06-15 01:05', createdDate: '2015-06-15 01:05', paypalLoginID: 'raaj@paypal.com' } ], searchStatus: 'Success', eBayUserID: '', errorCode: '0', rowCount: '6', pageNumber: '1', paginationValue: '1', paypalLoginID: 'raaj@paypal.com' }

很高兴知道是否有人使用 node.js 服务器端处理数据表

【问题讨论】:

  • 在服务器端处理模式下,您的服务器端代码应返回 JSON 格式的数据,如 here 所述。请发布您的服务器返回的 JSON 文件。
  • 所以我没有将我的 json 数据保存到的特定文件,但是在呈现路由“/viewreports”时,我能够在控制台上看到以下值 { reportList: [ { reportID: 'EIBBP-448',eBayUserID:'',reportStatus:'New',摘要:'Raj 创建的 BugBounty 报告',lastUpdatedDate:'2015-06-15 01:05',createdDate:'2015-06-15 01: 05', paypalLoginID: 'raaj@paypal.com' } ], searchStatus: 'Success', eBayUserID: '', errorCode: '0', rowCount: '6', pageNumber: '1', paginationValue: '1', paypalLoginID: 'raaj@paypal.com' }
  • 是否需要对上面的json值进行字符串化?
  • 您的回复对于服务器端处理模式不正确,请阅读Server-side processing了解更多详细信息和数据格式。是的,您需要以 JSON 格式返回字符串。

标签: javascript jquery node.js datatables jquery-datatables


【解决方案1】:

您根本不必为服务器端处理而烦恼。 我使用了一种简单的方法来欺骗dataTables 初始化。

首先,您需要通过您最喜欢的方式获取要在表格中显示的数据,在您确认数据显示良好后,现在前往您初始化dataTables 的位置并使其延迟初始化之前。

setTimeout(() => {
    $('#yourtable').dataTable({
        // datatables customization options
    });
}, 100)

例如,在我的例子中,我给了它 100 毫秒的延迟,它就像一个魅力。

【讨论】:

    【解决方案2】:

    您需要定义 dataSrccolumns.data - 以下应该可以工作:

    var table = $('#example').DataTable({
        processing: true,
        serverSide: true,
        ajax: {
            url: "/viewreports",
            dataSrc: "reportList"
        },    
        columns: [ 
            { data : "reportID" },
            { data : "eBayUserID" },
            { data : "reportStatus" },
            { data : "summary" },
            { data : "lastUpdatedDate" },        
            { data : "createdDate" },        
            { data : "paypalLoginID" }
       ]     
    }); 
    

    在一张空桌子上:

    <table id="example"></table>  
    
    • dataSrc 指定保存行项目的数组的名称(原因是“无法读取未定义的属性'长度'”)
    • columns.data 将项目属性映射到列

    【讨论】:

      猜你喜欢
      • 2019-07-16
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多