Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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 DataTables rows.add(array).draw()被多次调用_Javascript_Jquery_Angularjs_Datatables - Fatal编程技术网

Javascript DataTables rows.add(array).draw()被多次调用

Javascript DataTables rows.add(array).draw()被多次调用,javascript,jquery,angularjs,datatables,Javascript,Jquery,Angularjs,Datatables,我这样做是为了根据服务器返回的数据创建列数。我想检查数组中的数据是否与列名匹配,如果匹配,则返回yes,否则返回no function initTable(userJvmsArray) { var collumnsCallbacks = [{ title: "Username", data: "username" }]; for (var i = 0; i &

我这样做是为了根据服务器返回的数据创建列数。我想检查数组中的数据是否与列名匹配,如果匹配,则返回yes,否则返回no

function initTable(userJvmsArray) {
            var collumnsCallbacks = [{
                title: "Username",
                data: "username"
            }];

            for (var i = 0; i < $scope.unique.length; i++) {
                $('#nameColumn').after('<th>' + $scope.unique[i] + '</th>');
                var jvm = $scope.unique[i];
                var col = {
                    title: jvm,
                    data: function(data, type, row) {
                        var data2 = data;
                        var jvms = $scope.unique;
                        for (var k = 1; k < jvms.length; k++) {
                            console.log(jvms);
                            for (var j = 0; j < data2.myarray.length; j++) {
                                if (table.column(k).title() == data2.myarray[j].Name) {
                                    console.log(table.column(k).title() + " = " + data2.myarray[j].Name + " YES");
                                    return "yes";
                                } else {
                                console.log(table.column(k).title() + " = " + data2.myarray[j].Name + " NO");
                                    return "no";
                                }
                            }
                        }


                    }
                };
                collumnsCallbacks.push(col);
                $scope.columns = collumnsCallbacks;
            }
            $scope.myTable = $('#myTable').DataTable({
                'paging': true,
                "pageLength": 3,
                'columns': collumnsCallbacks
            });
原因

由于DataTables的工作方式,的函数被多次执行。虽然不清楚,但是这个函数可能会被多次调用,因为DataTables会为它需要的不同数据类型调用它—类型检测、排序、筛选和显示(
type=='type'
type=='sort'
type=='filter'
type=='display'
)。也可以调用它来设置单元格的数据(
set==“set”

函数的定义如下,有关更多详细信息,请参阅

data:function(行、类型、集、元){
注释

  • 您可以使用它,它可以被认为是的只读伴侣,并且不太复杂
  • 您的逻辑中有一个缺陷,有两个循环,它们只运行一次,因为您立即在内部循环中返回
    “yes”
    “no”
    值。我无法更正您的代码,因为不清楚您要做什么

有没有办法只调用一次?还是解决这个问题的另一种方法?谢谢@橙色,不清楚为什么要对
列使用函数。数据
。在特定条件下,是否只在单元格中显示“是”和“否”?另外,我没有看到您在标题中使用的
行.add(array).draw()
。是的!这就是我想要的。我稍后打电话给draw。这段代码位于一个名为initTable的函数中,在此函数调用之后,我执行rows.add(array).draw()。@orange,您能用
行添加缺少的代码吗?add(array)
?我认为您应该使用
列。而应该使用render
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user1: myword = myword YES myctrl.controller.js:66
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user1: myword = myword YES myctrl.controller.js:66

["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user11: myword = secondword NO myctrl.controller.js:69
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user11: myword = secondword NO myctrl.controller.js:69

["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user1: myword = myword YES myctrl.controller.js:66
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user11: myword = secondword NO myctrl.controller.js:69

["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user1: myword = myword YES myctrl.controller.js:66
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user11: myword = secondword NO myctrl.controller.js:69
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user1: myword = myword YES myctrl.controller.js:66
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user1: myword = myword YES myctrl.controller.js:66
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user11: myword = secondword NO myctrl.controller.js:69
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user11: myword = secondword NO