Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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 如何在Ajax中调用Datatables draw()方法?_Javascript_Django_Ajax_Datatables - Fatal编程技术网

Javascript 如何在Ajax中调用Datatables draw()方法?

Javascript 如何在Ajax中调用Datatables draw()方法?,javascript,django,ajax,datatables,Javascript,Django,Ajax,Datatables,我试图在Django应用程序中使用AJAX实现datatables draw()方法。我已经实现了datatables和AJAX,它们工作得很好。但是,每当我创建一个新对象并调用draw()方法,以便datatables可以刷新表并以正确的方式显示新创建的数据时,我都会面临很多挑战。如果我添加draw()方法,除了刷新页面外,表根本不会被填充 main.js //datatables $(document).ready(function() { $('table').on('click'

我试图在Django应用程序中使用AJAX实现datatables draw()方法。我已经实现了datatables和AJAX,它们工作得很好。但是,每当我创建一个新对象并调用draw()方法,以便datatables可以刷新表并以正确的方式显示新创建的数据时,我都会面临很多挑战。如果我添加draw()方法,除了刷新页面外,表根本不会被填充

main.js

//datatables
$(document).ready(function() {
    $('table').on('click', ".dropdownDatatableButton" ,function() {
      $( this ).toggleClass( "active");
    });

    function csrfSafeMethod(method) {
        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
    };

    $.ajaxSetup({
        beforeSend: function(xhr, settings) {
            if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                xhr.setRequestHeader("X-CSRFToken", csrftoken);
            }
        }
    });

    var csrftoken =  jQuery("[name=csrfmiddlewaretoken]").val();

    var table = $('#boardsTable').DataTable({
        "autoWidth": false,
        "info": false,
        "lengthChange": false,
        "processing": true,
        "hover": true,
        "serverMethod": 'post',
        "searching": true,
        "ajax": "/boards/api/data/?format=datatables",
        "pagingType": "full_numbers",
        "order": [[ 0, "asc" ]],
        language: {
            search: "",
            "zeroRecords":  '<img class=' + '"dataTables-error-image"' + 'src=' + "'/static/media/images/empty-search.jpg'"
                            + '/>' + '<p class=' + '"dataTables-error-text"' + '>'
                            + 'No boards were found that match your search' + '<p/>',

            "loadingRecords": '<div class="spinner-border m-5" role="status">'
            + '<span class="sr-only d-block">Loading...</span> </div>'
            + '<p class="d-block text-center mt-3">Pulling board information...' + '</p>',

            "processing": '<p class="d-block text-center datatables-processing-text">Please wait...' + '</p>',

            "emptyTable":  '<img class=' + '"dataTables-error-image"' + 'src=' + "'/static/media/images/new.jpg'"
                            + '/>' + '<p class=' + '"dataTables-error-text font-weight-bold"' + '>'
                            + 'No boards to show right now' + '<p/>'
                            + '<p class=' + '"dataTables-empty-table-description"' + '>'
                            + 'When you start working on recruitment campaigns, we’ll list all your boards here.'
                            + '<p/>'
                            + '<a class="dataTables-error-create-btn show-only-on-mobile" data-bs-toggle="modal"'
                            + 'data-bs-target="#createBoardModal" data-bs-backdrop="static"'
                            + 'data-bs-keyboard="false">' + 'Create a board' + '<a/>',
            },

        initComplete : function() {
            $("#boardsTable_filter").detach().appendTo('.filter-form');
        },

        "drawCallback": function(settings) {
            var pagination = $(this).closest('.dataTables_wrapper').find('.dataTables_paginate');
            pagination.toggle(this.api().page.info().pages > 1);
        },

        "columns": [
            {data: null,
                render: function ( data, type, row ) {
                // show the board avatar and make merge it with `data: name`
                    return '<a class="datatable-board-link" href="' + data.url.toLowerCase() + '/manage' + '">'
                    + '<img class="datatable-board-link-img" ' + 'src="' + data.avatar + '" ' + 'width="30px" '
                    + 'height="30px" ' + 'alt="board avatar" />' + data.name + '</a>' ;
                }
            },

            {data: null,
                render: function ( data, type, row, meta ) {
                    // show the URL which are accessible to candidates
                   return '<a class="new-tab-board-link" href="' + data.lead.username + '/'
                   + data.url + '" target="_blank">' + '/' + data.url
                   + '<span class="material-icons">open_in_new</span>' + '</a>';
               }
            },

            { data: "lead",
                render: function ( data, type, row, meta ) {
                    // show the lead recruiter avatar and combine the first and last names into a single table field
                    return '<a class="datatable-profile-link"' + 'href="'
                    + 'http://127.0.0.1:8080/people/teams/' + data.id + '/' + data.username.toLowerCase() +'"'
                    + 'target="_blank"' + '>' + '<img class="datatable-profile-link-img" ' + 'src="'+ data.avatar
                    + '" ' + 'width="30px" ' + 'height="30px" ' + 'alt="' + data.name + ' ' + "'s avatar" + '"'
                    + '/>' + data.name + '</a>';
                },
            },

            { data: null,
                render: function ( data, type, row, meta ) {
                    return '<div class="dropdown datatables-dropdown" id="datatablesDropdown">'
                    + '<span class="material-icons btn dropdownDatatableButton" id="dropdownDatatableButton"'
                    + 'type="button"' + 'data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">'
                    + 'more_horiz</span>'
                    + '<div class="dropdown-menu dropdown-menu-right datatables-dropdown-inner"'
                    + ' aria-labelledby="dropdownDatatableButton">'
                    + '<ul>'
                    + '<li><a href="' + data.url.toLowerCase() + '/settings' + '">Board settings</a></li>'
                    + '<li><a class="btn btn-link btn-sm text-left">Delete</a></li>'
                    + '</ul>'
                    + '</div>'
                    + '</div>';
                },
            },
        ],

        "columnDefs": [
            {"width": "10%", "targets": 3, "orderable": false},
        ],
    });

    table.columns().iterator('column', function (ctx, idx) {
        $(table.column(idx).header()).append('<span class="sort-icon"/>');
    });

    // call the AJAX post method
    $("#createBoardViaModalForm").on('submit', function (e) {
        var spinner = $('#loader');
        for ( instance in CKEDITOR.instances ) {
            CKEDITOR.instances[instance].updateElement();
        }
        e.preventDefault();
        spinner.show();
        var serializedData = $(this).serialize();
        $.ajax({
            type: 'POST',
            url: "post/ajax/board/",
            data: serializedData,
            success: function (data) {
                if($('input[type="checkbox"]').prop("checked") == true){
                    //some codes
                    ...
                    //take some serialised data and populate the table
                    // THIS IS WHERE THE ISSUE STARTS
                    var data = JSON.parse(data["data"]);
                    var fields = data[0]["fields"];
                    $("#boardsTable tbody").prepend(
                        `<tr>
                        <td>${fields["name"]||""}</td>
                        <td>${fields["url"]||""}</td>
                        <td>${fields["lead"]||""}</td>
                        </tr>`
                    );
                    // invoke datables draw() method to refresh the table
                    table.draw();
                    setTimeout(function(){
                        spinner.hide();
                    }, 1000);
                    console.log("Checkbox is checked. Modal will not be closed");
                }
                else if($('input[type="checkbox"]').prop("checked") == false){
                    // some codes
                    ...
                    table.draw();
                    // more codes
                }
            },
            error: function (jqXHR, textStatus, errorText) {
                let data = jqXHR.responseJSON;
                // more codes
                console.log('There are some errors on the submitted form. Check the data errors array')
                console.log(data)
            }
        })
    });

    //clear up the error logs when a user enters a value in the highlighted input field
});
//数据表
$(文档).ready(函数(){
$('table')。在('click',.dropdownDatatableButton',函数()上{
$(此).toggleClass(“活动”);
});
函数csrfSafeMethod(方法){
返回(/^(获取|头|选项|跟踪)$/.test(方法));
};
$.ajaxSetup({
发送前:功能(xhr、设置){
如果(!csrfSafeMethod(settings.type)&&!this.crossDomain){
setRequestHeader(“X-CSRFToken”,CSRFToken);
}
}
});
var csrftoken=jQuery(“[name=csrfmiddlewaretoken]”)。val();
变量表=$('#boardsTable')。数据表({
“自动宽度”:false,
“信息”:错误,
“长度变化”:错误,
“处理”:对,
“悬停”:没错,
“服务器方法”:“post”,
“搜索”:没错,
“ajax”:“/boards/api/data/?format=datatables”,
“pagingType”:“完整编号”,
“订单”:[[0,“asc”]],
语言:{
搜索:“,
“zeroRecords”:“+”

” +'未找到与您的搜索“+”

匹配的板, “加载记录”:“” +“正在加载…” +“

拉板信息…”+“

”, “正在处理”:“

请稍候…”+“

”, “emptyTable”:“+”

” +“现在没有要显示的板”+“

” +“

” +“当你开始进行招聘活动时,我们会在这里列出你所有的董事会。” +“

” + '' ; } }, {数据:空, 呈现:函数(数据、类型、行、元){ //显示候选人可以访问的URL 返回“”; } }, {数据:“领先”, 呈现:函数(数据、类型、行、元){ //显示招聘负责人头像,并将名字和姓氏合并到一个表字段中 返回“”; }, }, {数据:空, 呈现:函数(数据、类型、行、元){ 返回“” + '' +“更多水平” + '' +“

    ” +“
  • ” +“
  • 删除
  • ” +“
” + '' + ''; }, }, ], “columnDefs”:[ {“宽度”:“10%”,“目标”:3,“可订购”:false}, ], }); table.columns().iterator('column',function(ctx,idx){ $(table.column(idx.header()).append(“”); }); //调用AJAX post方法 $(“#createBoardViaModalForm”)。关于('submit',函数(e){ 变量微调器=$(“#加载器”); 例如(在CKEDITOR.instances中的实例){ CKEDITOR.instances[instance].updateElement(); } e、 预防默认值(); spinner.show(); var serializedData=$(this).serialize(); $.ajax({ 键入:“POST”, url:“post/ajax/board/”, 数据:序列化数据, 成功:功能(数据){ if($('input[type=“checkbox”]').prop(“checked”)==true){ //一些代码 ... //获取一些序列化数据并填充表格 //这就是问题的起点 var data=JSON.parse(data[“data”]); 变量字段=数据[0][“字段”]; $(“#boardsTable tbody”)。前缀( ` ${fields[“name”]| |“”} ${fields[“url”]| |”“} ${fields[“lead”]| |“”} ` ); //调用datablesdraw()方法刷新表 table.draw(); setTimeout(函数(){ spinner.hide(); }, 1000); console.log(“选中复选框。模式将不会关闭”); } else if($('input[type=“checkbox”]”)。prop(“checked”)==false){ //一些代码 ... table.draw(); //更多代码 } }, 错误:函数(jqXHR、textStatus、errorText){ 设data=jqXHR.responseJSON; //更多代码 console.log('提交的表单上有一些错误。请检查数据错误数组') console.log(数据) } }) }); //当用户在突出显示的输入字段中输入值时,清除错误日志 });
我使用了
数据表重新加载API

table = $("#boardsTable").DataTable().ajax.reload();

在AJAX成功函数中,您可以这样绘制:

             success: function(data) { 
                    console.log(data);
                    if (data.d != null && data.d != undefined && data.d.results.length > 0) {
                        var table = $('#boardsTable').DataTable();
                        table.rows.add(data.d.results).draw();
                    }
                }