代码之家  ›  专栏  ›  技术社区  ›  Basit

jquery批量处理ajax请求的正确方法

  •  0
  • Basit  · 技术社区  · 16 年前

    我有用户选择的行列表,我想逐一删除它们,并在最后显示结果。

    显然,如果我只是做一个简单的循环,每次调用ajax函数,但我如何循环并检查哪个成功,哪个失败,以及何时完成?

    你会怎么做?批量编辑/删除的正确方法是什么?

    1 回复  |  直到 16 年前
        1
  •  9
  •   Dan Herbert    16 年前

    DoS yourself

    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 成功 失败 完成

    $.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
            }
        }
    });
    

    针对评论:

    • 对于像gmail这样的应用程序来说,它的工作方式非常复杂,说“我会这样做,因为谷歌是这样做的”并不是一个好主意。并非所有适用于谷歌的东西都适用于每个公司或网站。像谷歌这样的公司面临着几乎没有其他网站需要担心的问题。然而,为了回答你的问题
      • 我只是验证了这一点:GMail使用一个带有ID数组的AJAX请求。不会发回任何个人状态代码。似乎(我在这里猜测)Gmail会为您刚才执行的操作返回一个“操作ID”,因此您可以通过单击删除电子邮件后短暂出现的撤消链接来撤消该操作。
      • 这真的取决于你的应用程序的业务规则。如果您的应用程序在多人可以同时更改记录的情况下使用(仅举一例),则一个用户试图删除的内容可能在其他人单击“删除”按钮之前已被删除。在大多数情况下,我看不到有人关心谁先删除了记录,因为如果它被删除,它就被删除了,不管是谁真正删除的。然而,业务规则可能会规定(尽管可能很荒谬)你需要向用户报告这些信息。在这种情况下,您必须返回每次删除的状态数组。
    • 为了防止黑客删除其他人的记录,有几件事要做:
      • 将AJAX处理程序与网站的其他部分区别对待。他们不应该得到任何特权。对AJAX处理程序的请求应该像其他所有请求一样进行身份验证。
      • 使用POST请求(正如我在示例中提到的)进行破坏性操作或更改数据的操作。这将使黑客更难执行 Cross-Site Request Forgeries (CSRF) 显然,这不是一件万无一失的事情,但它阻止了容易的漏洞利用。
      • 到服务器 。这将防止SQL注入。
      • OWASP Top Ten list