我面临一个问题,并认为我找到了一个工作解决方案。但是,我只是想向公众批评者反驳。防止垃圾邮件异步呼叫的好方法
我有一个小的应用程序,可以触发ajax调用。
这些电话可能需要一段时间才能恢复。
- 有一件我讨厌的事情是,有一种情况,点击多次的用户会发送大量的请求,而结果会以尽可能快的速度平稳回来。
- 我也不想知道我的用户(只要他明智,并且治愈了他严重的广泛的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();
}
为了澄清这一切,我做了一个工作的jsfiddle应该是自explan足够atory:http://jsfiddle.net/LhermitteG/L8kqa/
到目前为止,一切运作良好,这是罚款和花花公子,但我的问题是:
难道我这样做的权利?
有没有关于此的设计模式?
如果我做错了,有什么不好?
我该如何改进?
我错过了什么吗?
你知道我是......我一直想念的东西:(
是的,我知道我有,我应该解决的不安全感的问题...
- * 我确定这是一种真正的疾病,它必须是真的,我见过它!
更简单的解决方案:禁用可点击元素,直到AJAX请求返回或超时。 –
这是我想到的解决方案,但在我的案例中很难实现(出于各种原因,其中之一是我的功能不知谁可能称她)。但我当然可以,我会首先支持那一个。 – Ar3s
这个问题似乎更适合http://codereview.stackexchange.com –