Javascript 防止垃圾邮件异步调用的好方法
我面临一个问题,我想我找到了一个有效的解决办法。 但为了确定我想面对公众的批评 我有一个可以触发ajax调用的小应用程序 这些电话可能需要时间才能回复Javascript 防止垃圾邮件异步调用的好方法,javascript,ajax,Javascript,Ajax,我面临一个问题,我想我找到了一个有效的解决办法。 但为了确定我想面对公众的批评 我有一个可以触发ajax调用的小应用程序 这些电话可能需要时间才能回复 我最不喜欢的一件事是,当用户多次点击时,会发送大量请求,而结果会以最快的速度和平返回 我也不想知道我的用户(只要他变得明智并治愈了严重的普遍性clickoïdosis*病例)没有得到他调用的最后一个操作的结果 因此,为了避免这种情况,我认为我可以: 告诉我的函数注意它是否已经被调用并且正在等待响应 如果是,则它存储对它进行的任何其他调用,并
- 我最不喜欢的一件事是,当用户多次点击时,会发送大量请求,而结果会以最快的速度和平返回
- 我也不想知道我的用户(只要他变得明智并治愈了严重的普遍性clickoïdosis*病例)没有得到他调用的最后一个操作的结果
- 告诉我的函数注意它是否已经被调用并且正在等待响应李>
- 如果是,则它存储对它进行的任何其他调用,并返回“不做任何事情”。
- 任何进一步的调用都会挤压存储的一个,因为我只想保持一个调用(最后一个)处于活动状态
- 执行回调时,它会检查调用是否挂起。
- 如果没有呼叫正在等待,那么它将按应有的方式运行
- 如果一个调用挂起,它将跳过它的正常行为,只调用触发ajax调用的方法,并使用挂起的数据集清除存储挂起调用的变量
function bob(i) {
var me = this;
if (this.isFetching === undefined) {
this.isFetching = false;
}
if (this.isFetching) {
this.nextFetch = i;
return;
} else {
this.isFetching = true;
}
yourFavoriteAjaxCallerMethod({
url: 'http://this_server_does_not_exist.net/this.is?an=example',
data: {
json: JSON.encode({
bob: i
}),
delay: 2
},
onSuccess: function (response) {
console.log(response.bob);
me.isFetching = false;
if (me.nextFetch !== undefined) {
var nextFetch = me.nextFetch;
delete me.nextFetch;
bob(nextFetch);
return;
}
alert(response.bob);
}
}).send();
}
为了澄清所有这一切,我制作了一个工作的JSFIDLE,它应该是不言自明的:
到目前为止,一切正常,这很好,但我的问题是:
我做对了吗
这有设计模式吗
如果我做错了,有什么不好
我怎样才能改进它
我错过什么了吗
你知道我是。。。我总是错过一些东西:(
是的,我知道我有不安全感的问题,我应该解决
-*我确信这是一种真正的疾病,它必须是,它是真实的,我已经看到了!对于事件减少,您谈论的是去抖动。有一个jquery去抖动方法,并且有自己的实现 问题的第二部分是典型的自动完成-在一般搜索中,用户首先键入的字符较少,导致较大且通常较慢的响应。当用户键入更多信息时,查询会较长,但随着搜索查询返回的匹配项较少且负载较小,响应会更快。软件模式at需要确保最后的最新响应是相关标识符模式(163),我认为最好在这里介绍:-参见幻灯片45
如果这看起来太棘手,则将最后一个请求和相关的(消息)id存储到回调处理程序中,可以使用javascript,也可以从服务器回显,这非常适合映射一对一请求。如果有任何请求返回,请检查它们是否具有最新的(消息)id,如果没有,则应该安全地忽略它们。更简单的解决方案:禁用可单击元素,直到AJAX请求返回或超时。这是我考虑过的解决方案,但很难实现(出于各种原因,其中之一是我的函数不知道谁会调用她)在我的情况下。但我当然可以,我会优先考虑这个问题。这个问题似乎更适合我。我没有想到它,你是对的。我应该在这里关闭它,然后在那里重新打开它吗?也许这是一种优雅的方法,可以避免对服务器产生太多“垃圾邮件”流量,但它解决了一个如果你只提供提要就不会存在的问题回到用户。老实说,如果我点击了某个东西而某个东西没有发生,我会感到沮丧,并认为某个东西坏了。按照MikeW说的去做,不要疏远你的用户。先生,你给了我我想要的东西。一个清晰的、非评判性的解释,包括模式和东西。