Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery DataTables列使用数据自动初始化_Javascript_Jquery_Jquery Ui_Data Binding_Datatables - Fatal编程技术网

Javascript JQuery DataTables列使用数据自动初始化

Javascript JQuery DataTables列使用数据自动初始化,javascript,jquery,jquery-ui,data-binding,datatables,Javascript,Jquery,Jquery Ui,Data Binding,Datatables,我有一个JQuery数据表,我已经使用它一段时间了,我想我在这里遗漏了一些东西 然而,我最近遇到了直接绑定JSON数据的需求之一 例如,我的JSON看起来像来自API: [{"componentNumber":"ABC","factory":"India","productNumber":"CR","productRevisionState":"123","placementTimeLocal":"2018-08-21T00:00:00","position":"up"},{"component

我有一个JQuery数据表,我已经使用它一段时间了,我想我在这里遗漏了一些东西

然而,我最近遇到了直接绑定JSON数据的需求之一

例如,我的JSON看起来像来自API:

[{"componentNumber":"ABC","factory":"India","productNumber":"CR","productRevisionState":"123","placementTimeLocal":"2018-08-21T00:00:00","position":"up"},{"componentNumber":"ABC","factory":"India","productNumber":"CR","productRevisionState":"123","placementTimeLocal":"2018-08-21T00:00:00","position":"up"},
{"componentNumber":"ABC","factory":"India","productNumber":"CR","productRevisionState":"123","placementTimeLocal":"2018-08-21T00:00:00","position":"up"}]
我知道我可以使用JSON并在Jquery中提取列,然后将其传递给Datatables列,但是如果有一种简单的方法Datatable自动提取列,我想知道的是:

    $.ajax({
                type: "Post",
                url: "http://localhost:5555/myapi",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    //datasource = data;
                    $('#myTable').DataTable({
                        "Data": JSON.parse(data),
                        "Columns" : JSON.parse(data)
                            });

                },
                error: function (err) {
                    alert(err);
                }
            })
我看到的是:

  • JQuery是否有任何这样的特性?如果没有,你能建议吗 对于大型数据集来说,任何其他数据表库都是快速的

  • 我想消除所有围绕代码的额外循环

  • 我无法更新返回数据的源系统
  • 代码的更新版本,摘自下面的答案,感谢Kiran让我有点感动:

     $.ajax({
                type: "Post",
                url: "http://localhost:5555/myapi",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                 // **how to get rid of this loop? for looping columns**
                    var adColumns = [];
                    $.each(data[0], function (i, item) {
                        var col = {
                            data: i,
                            title: i
                        };
                        adColumns.push(col);
    
            })
    
    
                    //datasource = data;
                    console.log(data);
                    $('#myTable').DataTable({
                        "data": data,
                        "info": true,
                        "paging": true,
                        "columns": adColumns
                    });
    
                },
                error: function (err) {
                    alert(err);
                }
            })
    

    DataTables能够从Ajax可以获得的几乎任何JSON数据源读取数据。通过将
    ajax
    选项设置为JSON数据源的地址,可以以最简单的形式实现这一点。看


    对于JSON,这里有一个

    尝试以下代码。它可能会帮助你达到预期的结果。这可能不是一个优化的代码

    希望这有帮助

    编辑

    创建列名数组至少需要一个循环。因此,您还可以使用以下代码来消除多个循环

    var adColumns = [];
      Object.keys(strData[0]).forEach(key => {
        var col = {
          data: key,
          title: key
        };
    
        adColumns.push(col);
      });
    
    $(函数(){
    变量strData=[{
    “组件编号”:“ABC”,
    “工厂”:“印度”,
    “产品编号”:“CR”,
    “productRevisionState”:“123”,
    “placementTimeLocal”:“2018-08-21T00:00:00”,
    “位置”:“向上”
    }, {
    “组件编号”:“ABC”,
    “工厂”:“印度”,
    “产品编号”:“CR”,
    “productRevisionState”:“123”,
    “placementTimeLocal”:“2018-08-21T00:00:00”,
    “位置”:“向上”
    },
    {
    “组件编号”:“ABC”,
    “工厂”:“印度”,
    “产品编号”:“CR”,
    “productRevisionState”:“123”,
    “placementTimeLocal”:“2018-08-21T00:00:00”,
    “位置”:“向上”
    }
    ];
    /*var dta=标准数据;
    var tableColumnNames=[];
    var键=[];
    用于(标准数据中的变量i){
    var-key=i;
    var val=标准数据[i];
    for(var j在val中){
    var sub_key=j;
    按键。按下(sub_键);
    }
    }
    var sColumns=Array.from(新集合(键));
    var adColumns=[];
    for(sColumns中的变量列){
    var sKey=sColumns[col];
    变量列={
    资料来源:斯凯,
    标题:斯凯
    };
    adColumns.push(col);
    }*/
    var adColumns=[];
    Object.key(strData[0]).forEach(key=>{
    变量列={
    数据:关键,
    标题:钥匙
    };
    adColumns.push(col);
    });
    $('#myTable')。数据表({
    “数据”:标准数据,
    “columns”:JSON.parse(JSON.stringify(adColumns))
    });
    });
    
    
    
    我的列可以随时更改,因此我不想明确定义它们。正如您所调用的Ajax一样,Datatable可以直接将列名作为JSON作为键和值对并绑定,而无需在HTML或JQUERYplease中的任何位置指定它。请参考此链接并仔细检查JSON数据的原样。谢谢。你的代码运行得很好,但是我想摆脱循环!我已经更新了我的问题,它使用1个循环,但是如果无论如何我可以摆脱所有这些循环,在我看来,至少一个循环是必要的。我接受你的答案,使用1个循环,但是遗憾的是Datatable没有自动获取列。你还有其他数据表可以快速完成任务吗?@NipunAmbastha还有另一个插件叫jqgrid,但我不太熟悉。请检查一下。