匿名函数变量范围[js,ajax]

时间:2010-04-18 16:47:29

标签: javascript ajax scope anonymous-methods

$(".delete").click(
    function()  {
        var thesender = this;
        $(thesender).text("Del...");
        $.getJSON("ajax.php", {},
            function(data) {
                if (data["result"])
                    $(thesender).remove(); // variable defined outside
                else
                    alert('Error!');
            }
        );

        return false;
    }
);

如果用户在调用ajax回调之前点击另一个“.delete”,这会导致问题吗?

3 个答案:

答案 0 :(得分:2)

它会在同一时间触发另一个ajax请求。这是否会导致问题取决于服务器端的事情。

通常你要删除某种类型的ID或密钥...我将在后面的代码中假设您将会这样做,但是现在它只是发出另一个删除并调用ajax.php ...结果如何这完全取决于那个PHP页面。

ajax请求完成时,那个 ajax请求发生回调,每个请求在这方面都是独立的,因此每个回调都是单独处理的。 thesender位于您当前的闭包中,因此它对于每个请求都是唯一的,并且它是相应的回调。

答案 1 :(得分:1)

每次调用click处理程序时,都会创建一个单独的闭包,因此每个AJAX回调都会引用正确的变量。

因此,您无需担心。 (假设服务器可以处理请求)

答案 2 :(得分:1)

它将触发另一个事件。如果您希望事件仅触发一次,则可以使用one而不是单击。或者,您可以跟踪AJAX请求是否正在进行中;例如,使用data如下:

$('.delete').click(function () {
  if ($(this).data('inProgress')) {
    // Request in progress; cancel?
    return;
  } else {
    $(this).data('inProgress', true);
  };
});

你也可以通过使用全局变量,添加类等来实现同样的目的。