我正在使用它来加载表,但是当我第一次加载它(即第一个请求)时它可以工作,但是在随后的请求中它无法加载新数据。
我正在使用带有jquery数据表的asp.net mvc。为什么不起作用?
在控制台中引发此错误。
我收到“无法读取未定义的属性'reload'”
$('form').submit(function(e) {
e.preventDefault();
if (!$(this).valid()) {
$("#tbodytblServicesReport").html("");
return;
} else {
filltblServicesReport();
}
});
function filltblServicesReport() {
$('tfoot td#tdTotal').text("");
var url = '@Url.Action("ServicesDetailedReportPartyWise")';
var data = {
FromDate: $("#FromDate").val(),
ToDate: $("#ToDate").val(),
PartyName: $("#PartyName").val()
}
$.post(url, data, function(response) {
if (response.ReturnStatusJSON == true) {
$("#tbodytblServicesReport").html("");
var counter = 1;
$.each(response.lstDetailedServicesReturned, function(i, val) {
$("#tbodytblServicesReport").append($('<tr>').append($('<td>').html(i))
.append($('<td>').html((val.EntryDateTime === null || val.EntryDateTime === "") ? "N/A" : formatJSONDate(val.EntryDateTime)))
.append($('<td>').html(val.InvoiceNo))
.append($('<td>').html(val.CustomerName))
.append($('<td>').html(val.VehicleRegNo))
.append($('<td>').html(val.ServiceName))
.append($('<td>').html(val.PartyName))
.append($('<td>').html(val.ServicePrice))
.append($('<td>').html(val.Commission))
)
i++;
$('tfoot td#tdTotal').text(val.TotalCost);
$('tfoot td#tdTotalCommission').text(val.TotalCommission);
$('tfoot td#tdCommissionValue').text("-" + val.TotalCommission);
$('tfoot td#tdFinalTotal').text(val.TotalCostMinusTotalCommission);
//$('tfoot td#tdTotalCostMinusCommissionMinusTotalOtherExpenses').text(val.TotalCostMinusCommissionMinusTotalOtherExpenses);
counter = i;
})
if (counter <= 1) {
$('tfoot td#tdTotal').text("");
$('tfoot td#tdTotalCommission').text("");
$('tfoot td#tdCommissionValue').text("");
$('tfoot td#tdFinalTotal').text("");
//$('tfoot td#tdTotalCostMinusCommissionMinusTotalOtherExpenses').text("");
return;
}
$('#tblServicesReport').show();
$('#tblServicesReport').DataTable.ajax.reload(null, false)({
bPaginate: false,
dom: 'Bfrtip',
buttons: [
'copyHtml5',
'excelHtml5',
'csvHtml5',
{
extend: 'pdfHtml5',
footer: true,
title: 'Party Wise Report (' + $('#FromDate').val() + ' - ' + $('#ToDate').val() + ')',
customize: function(doc) {
doc.styles.title = {
color: 'gray',
fontSize: '15',
alignment: 'center'
}
doc.content[1].table.widths = Array(doc.content[1].table.body[0].length + 1).join('*').split('');
doc.styles.tableHeader.fontSize = 10;
doc.styles.tableHeader.alignment = 'left';
doc.styles.tableHeader.color = 'white'
}
},
{
extend: 'print',
footer: true
//title: 'Sales Report'
}
]
});
} else {
swal("Sorry !", "No Record Found", "error");
$("#tbodytblServicesReport").html("");
}
});
}
答案 0 :(得分:0)
Datatable具有内置的Ajax,因此将表初始化为此
var url = '@Url.Action("ServicesDetailedReportPartyWise")';
var data = {
FromDate: $("#FromDate").val(),
ToDate: $("#ToDate").val(),
PartyName: $("#PartyName").val()
}
var myTable = $('#tblServicesReport').DataTable({ ajax: url });
,您可以在所需事件上重新加载myTable.ajax.reload();
IMO,按照我的示例中的描述,重构代码以更好地在结构创建和数据填充之间进行逻辑划分。
答案 1 :(得分:0)
表的重载方法不起作用,因此有一种解决方法。
首先,初始负载适当 然后对于其他加载,之后需要销毁数据表并清空行 所以这是我的做法-
第一次创建数据表
$('#mytable').dataTable()
第二次:-
//ajax for delete row
$.ajax({
url: url,
type: "POST",
data: { request },
cache: false,
success: function (data) {
//DESTROY datatable
$('#mytable').DataTable().destroy();
//remove table rows
$('#mytable tbody').empty();
$.ajax({
type: "GET",
url: "url",
"columnDefs": [
{ className: "ques", "targets": [1] }
],
success: function (response) {
if (response.Status === 1) {
//Create new table and get list
$('#mytable').dataTable({
"data": response.data,
"initComplete": function (settings, json) {
App.unblockUI('.questionslist');
},
columns: [{ "data": "Id" },
{ "data": "Question", "width": "50%" },
{ "data": null, "render": function (data, type, full) { return '<a class="btn btn-info btn-sm" href=/Home/EditQuestion/' + full.Id + '>' + 'Edit' + '</a>'; }, },
{ "data": null, "render": function (data, type, row) { return '<button type="button" class="btn btn-danger btn-sm" value="' + row.Id + '" id="delete">DELETE</button>' } }
],
"pageLength": 10,
"order": [[0, "desc"]],
});
} else {
toastr.error(response.Message)
}
},
failure: function (response) {
},
error: function (response) {
}
});
}
else {
}
},
error: function (ex) {
},
})
对于那些不了解的人 第一个Ajax调用在这里执行DELETE方法:-从数据表中删除一行
IF 成功删除后,它会破坏数据表并删除所有行
//DESTROY datatable
$('#mytable').DataTable().destroy();
//remove table rows
$('#mytable tbody').empty();
之后 最后的ajax调用(删除一个条目之后)再次获取表的所有数据,并将其加载到表中
^^^^在上面的ajax调用中,销毁数据表后,它看起来像一个新表,因此它的工作原理与第一次工作类似
如有疑问请还原