每个ajax请求都会产生与之相关的开销.为每一行打电话是一个坏主意,因为它可能会使请求超载服务器,如果您收到足够的流量,您可以自己动手.此外,所有浏览器都限制一次可以发出多少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);
Run Code Online (Sandbox Code Playgroud)
处理结果可能更难.您应该设计系统,以便(如果成功)删除每一行.除非你正在处理一个非常复杂的系统,否则你应该永远不会遇到某些行传递而某些行失败的情况.如果发生这种情况,您需要重新考虑您的系统架构.jQuery有事件success和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
}
}
});
Run Code Online (Sandbox Code Playgroud)
回应评论:
| 归档时间: |
|
| 查看次数: |
2470 次 |
| 最近记录: |