2011-07-20 124 views
2

当您单击给定的链接时,它将加载一个页面,该页面可以进行存储过程调用。如果存储过程调用需要几秒钟时间,则人们再次点击该链接。如果他们点击链接十几次,我可以看到十几个查询在数据库上运行。最后一个查询是唯一一个向用户返回任何内容的查询,但是其他11个查询在使用资源时执行完成。防止用户反复点击链接

防止这种情况的最佳方法是什么?有没有办法在数据库级别停止它,或者这是一个接口问题?这是我如何使用PHP连接数据库的结果?

+0

可能重复的[如何防止用户在链接的图像上多次点击?](http://stackoverflow.com/questions/3892354/how-to-prevent-users-from-clicking-multiple-times- on-a-linked-image) – genesis

+0

该解决方案可能最终成为该方案的副本,但我希望找到一种替代解决方案。如果我可以在数据库或服务器端(PHP)解决这个问题,我宁愿使用JavaScript来禁用元素。 – brian

回答

7

就我个人而言,我会解决接口问题 - 用户多次点击背后的原因不是用户错误,而是您的网站没有传达任何有关它正在尝试做的事情。考虑将链接设置为禁用onclick,可能会显示某种加载动画,然后在获取数据回调后重新启用链接。这样用户界面始终能够反映后端状态,并且可以防止用户排队等待一系列请求!

+2

点击时禁用链接的问题是,例如,连接断开时。如果没有收到回调,链接不能再次被点击(一个合理的理由点击两次),如果用户不得不刷新,表单中的任何数据可能会丢失。在这种情况下:使用超时重新启用链接。 – Pindatjuh

+0

非常好的建议 - 你想要的最后一件事就是禁用UI,因为它依赖于不能保证的东西。 –

1

一个解决方案可能是在查询期间禁用链接。您可以使用一些本地JavaScript来更新当前页面或切换到另一个根本没有链接的页面 - 这完全取决于您的网站设计。

另一种方法是建立一个后卫变量的代码,以便它仅调用时,它的取消设置存储过程:

if (!callingProcedure) 
{ 
    callingProcedure = true; 
    call procedure 
} 

然后,当该程序返回复位callingProcedure为false。

拥有某种进度指示器也将有所帮助 - 给您的用户反馈,该网站实际上正在做一些事情。

1

使用类似jQuery BlockUI Plugin的东西在请求处理时阻塞页面。这会让用户确信发生了某些事情,并防止他们再次点击。

相关问题