处理只能同步发生的事件的最佳实践,但其他事情仍可以异步进行

时间:2011-03-24 01:24:49

标签: javascript jquery ajax

我使用jQuery和设置切换之类的东西,我发现自己写了很多代码,如:

foo.toggleSetting = function() {
  var el = $(this);
  if(el.data('clicked')) return false; //need to back off if we're already doing something
  el.data('clicked',true);

  var visible = $(this).is(':visible');
  $.ajax({
     url: '/update_setting',
     data: {'status': visible},
     success: function() { el.data('clicked',false); }
  });
}

$(function(){
   $('#setting_toggle').click(foo.toggleSetting);
});

我试图阻止的是有人发送垃圾邮件,将一个设置切换为向服务器发送大量请求,但这只是让人觉得笨拙。我知道我可以将ajax请求设置为同步模式,但这会阻止整个应用程序做任何事情,这也不是我的意图(即你可以玩其他切换,这样就可以了。)

其他人如何处理这种情况?'

1 个答案:

答案 0 :(得分:4)

一种方法是使用.one()并在成功回调中重新绑定事件。

foo.toggleSetting = function() {
  var el = $(this);

  var visible = $(this).is(':visible');
  $.ajax({
     url: '/update_setting',
     data: {'status': visible},
     success: function() { el.one('click', foo.toggleSetting); }
  });
}

$(function(){
   $('#setting_toggle').one('click', foo.toggleSetting);
});