我在我的MVC应用程序中遇到Datatables和删除问题。每个行都有一个按钮,当单击时会打开一个模态窗口,询问用户是否要删除该行。如果他们单击"确定",数据将从我的数据库中删除,删除的行将被删除,窗口将关闭。当我删除一行时,这一切都按预期工作。但是,当我在第一次删除后尝试删除任何其他行(没有刷新页面)时会出现问题。
当我第二次点击删除时,我的功能首先尝试删除第一行再次并失败,因为它不再存在。然后立即成功删除我要删除的新行。我有控制台输出,告诉我删除功能有什么ID,他们发现旧的ID首先被重新传递给该功能。
如果我删除一行(ID = 87)然后删除另一行(ID = 84)而不刷新控制台或页面,这是我的输出
clicked delete on 87
Deleting #87
DELETE http://localhost:49773/api/IncidentAPI/87
200 OK
Deleted
clicked delete on 87
Deleting #87
DELETE http://localhost:49773/api/IncidentAPI/87
500 Internal Server Error
clicked delete on 84
Deleting #84
DELETE http://localhost:49773/api/IncidentAPI/84
200 OK
"NetworkError: 500 Internal Server Error - http://localhost:49773/api/IncidentAPI/87"
Deleted
以下是每行中删除按钮的代码
$('.Delete').unbind().on("click", function () {
var tr = $(this).closest('tr');
var ID = dataLog.row(tr).data()[16];
tr.addClass('deleteHighlight');
$('#deleteWindow').dialog('open');
$('.deleteOK').on("click", function () {
console.log("clicked delete on " + ID);
deleteIncident(ID); // deletes the row with that ID
$('.Details').bind();
});
$('.deleteClose').on('click', function (event, ui) {
console.log("Close delete");
tr.removeClass('deleteHighlight', 500);
$('#deleteWindow').dialog('close');
});
});
这是我的删除方法
function deleteIncident(ID) {
var rowID = '#' + ID;
console.log("Deleting " + rowID);
$.ajax({
url: '/api/IncidentAPI/' + ID,
type: 'DELETE',
contentType: "application/json; charset=utf-8",
success: function (results) {
console.log("Deleted");
dataLog.row(rowID).remove().draw();
$('#deleteWindow').dialog('close');
}
});
}
答案 0 :(得分:0)
更改您的AJAX请求,如下所示
$.ajax({
url: '/api/IncidentAPI/',
type: 'POST',
data:{id:ID},
dataType: "json",
success: function (results) {
console.log("Deleted");
dataLog.row(rowID).remove().draw();
$('#deleteWindow').dialog('close');
}
});
在PHP端使用 $ _ POST 获取ID的值。例如,$ id = $ _POST [' id']; 我希望它能解决你的问题。
答案 1 :(得分:0)
事实证明我绑定了错误的按钮。我需要绑定OK按钮,而不是打开模态窗口的按钮。
$('.deleteOK').unbind().on("click", function () {
deleteIncident(ID);
$('.deleteOK').bind();
});