我有用户选择的行的列表,我想一个接一个地删除它们,并在最后显示结果。
显然,如果我只是执行简单的循环并调用每次ajax函数,但是我如何循环并检查哪个成功,哪个失败,以及它们何时都完成了呢?
你会怎么做?批量编辑/删除的正确方式是什么?
发布于 2009-10-31 10:19:53
每个ajax请求都会有与之相关的开销。为每一行进行调用不是一个好主意,因为这可能会使服务器因请求而过载,并且如果您收到足够的流量,则可以使用DoS yourself。此外,所有浏览器都有一次可以发出多少个HTTP请求的限制,因此(取决于浏览器),删除将突然发生,而不是一次全部删除,即使您告诉它们一个接一个地执行。
最佳选择是将要编辑/删除的行分组到一个JSON数组中,并在单个请求中将它们发送到服务器。然后,您可以在服务器上解析JSON并相应地删除这些项。完成后,返回一个包含结果的JSON数组。
这段jQuery伪代码假定您使用的是原生JSON object的浏览器,或者您使用的是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具有events for success and failure,您可以使用它来处理请求的一般成功或失败,我建议您使用它。
从上面的代码继续,这是处理删除记录的一种方法。为了简单起见,我在这里使用complete事件,但如果可能,您应该使用success和failure事件。无论请求成功还是失败,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
}
}
});回复评论的:
的状态数组
的受害者
https://stackoverflow.com/questions/1653127
复制相似问题