我有用户选择的行列表,我想一一删除它们并最终显示结果。
显然,如果我只是做简单的循环并每次调用 ajax 函数,但是我如何循环并检查哪个成功,哪个失败以及它们何时完成?
你会怎么做?进行批量编辑/删除的正确方法是什么?
每个 ajax 请求都会有与之相关的开销。对每一行进行调用不是一个好主意,因为它可能会使服务器的请求超载,并且如果您收到足够的流量,您可以自己进行 DoS 。此外,所有浏览器对一次可以发出多少个 HTTP 请求都有限制,因此(取决于浏览器),即使您告诉它们一个接一个地执行,删除也会突然发生,而不是一次全部发生。
您最好的选择是将要编辑/删除的行分组到 JSON 数组中,并在单个请求中将它们发送到服务器。然后,您可以在服务器上解析 JSON 并相应地删除项目。完成后,返回一个包含结果的 JSON 数组。
此 jQuery 伪代码假定您使用原生JSON 对象定位浏览器,或者您正在使用json2.js。基本上,这段代码只是在您向用户显示的表格的每一行中查找“隐藏的 ID”字段,并将其添加到数组中。您可以根据需要进行调整。
var recordsToDelete = [];
$("tr.myRow").each(function() {
var id = $(this).find("input:hidden").val();
recordsToDelete.push(id);
});
var json = JSON.stringify(recordsToDelete);
处理结果可能更难。您应该设计您的系统,以便(如果成功)删除每一行。除非您正在处理一个非常复杂的系统,否则您永远不应该遇到某些行通过而某些行失败的情况。如果发生这种情况,您需要重新考虑您的系统架构。jQuery 有事件success
,failure
您可以使用这些事件来处理请求的一般成功或失败,我建议您使用它。
继续上面的代码,这是处理删除记录的一种方法。complete
为简单起见,我在这里使用事件,但如果可能,您应该使用success
andfailure
事件。complete
无论请求成功还是失败,事件总是会发生。
$.ajax({
url: "http://stackoverflow.com/questions/1653127",
type: "POST", // Always use POST when deleting data
data: { ids: json },
complete: function(xhr, status) {
var response = JSON.parse(xhr.responseXML);
// Response will be an array of key/value
// pairs indicating which rows succeeded or failed
for (var i = 0; i < response.length; i++) {
var recordID = response[i].recordID;
var status = response[i].status;
// Do stuff with the status codes here
}
}
});
回应评论: