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

标签 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 请求设置为同步模式,但这会阻止整个应用程序做任何事情,这也不是我的本意(即你可以使用其他切换开关,那会很好)。

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

最佳答案

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

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

关于javascript - 处理只能同步发生的事件的最佳实践,但其他事情仍然可以异步进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5413692/

相关文章:

javascript - 单击链接后使用 jQuery 加载图像

javascript - 一段时间后如何停止执行包含无限循环的Javascript函数

javascript - 将麦克风录音机从浏览器发送到谷歌语音到文本 - Javascript

Javascript 替换未按预期工作

jquery - 查找元素的索引

jquery - 我正在尝试将我的文本值与 slider 栏对齐,但遇到问题

javascript - Highcharts 基于数据系列值自定义工具提示显示

javascript - 将 javascript 输出消息返回到 html 正文中

javascript - AJAX DELETE 方法重定向不起作用

ajax - 在 Django 中使用 Dajaxice 刷新表格