javascript 防止重复提交

来源:互联网 发布:spycall软件下载 编辑:程序博客网 时间:2024/06/10 14:04

    在项目里面有时候会遇到防止发送重复请求或防止重复调用某一function的问题,可以通过类似表单令牌的方式来实现。

      为了兼容部分浏览器,我们先使用一个方法来打印日志。

      function log(txt){  

if(window.console){  

console.info(txt);  

}else{  

alert(txt);  

}

}

      例如,我们现在有一个打招呼的函数 sayhello,我们希望防止其重复调用的问题。

     function sayHello(name){ log("Hello,"+name);}

现在我们对其做一点处理,避免我们打招呼的时候喋喋不休,说同样的话。

  /** * 防止请求的重复提交 

* 使用 Proxy.getProxy(func)对函数func进行,返回一个代理 

* 当代理的参数列表发生变化时,执行预定义的callback 

*/

var Proxy = {

token:"", //已有令牌

getProxy:function(callback){ 

var instance = function(){

//使用函数名和参数列表生成新令牌

var newToken = callback.toString()+Array.prototype.slice.call(arguments).toString();

if(this.token!=newToken){

//和已有令牌对比,更新令牌

this.token = newToken;

log("first say hello!");

}else{

//前后一致时,不调用函数,直接返回

log("not first say hello!");

return;

}

//调用函数

callback.apply(this,arguments);

};

//返回callback的代理

return instance;

}

};

通过这种方式获得的function的代理,在每次调用的时候,如果参数没发生变化,第二次调用就会被屏蔽掉。

       在使用时,只需如下操作:

        var proxy = Proxy.getProxy(sayHello);

proxy("zhagnsan")

如果希望在使用过程中保持函数名不变的话,可以修改其引用:

var sayHello = Proxy.getProxy(sayHello);

sayHello("zhagnsan")



原创粉丝点击