如何取消java spring mvc应用程序中的先前操作

时间:2013-04-24 18:35:45

标签: java ajax spring java-ee spring-mvc

我正在开发一个spring MVC应用程序。我遇到了一些有趣的案例。

为了便于解释,我将顶部的堆栈流按钮作为示例(我的意思是那些问题,标签,用户,徽章,未应答的按钮)。

现在在我的应用程序中我有类似的按钮。当用户点击任何按钮时,它通过传递适当的参数进行ajax调用。服务器进行SQL查询并返回结果。

现在假设像我这样的疯狂用户不断点击这些按钮。所以每次点击都会进行ajax调用。并且完成其操作的东西出现在前端。因此,即使用户单击最后一个中的“标签”按钮,它也可能会再次出现,之前单击需要很长时间才能返回前端的问题可能会覆盖该页面。我该如何解决这个问题? (我希望标签数据显示为用户最后点击)

首先我知道当用户第一次点击问题然后在标签上我不再需要查询sql for questions按钮。有没有办法让我停止处理问题按钮的SQL查询。

由于

3 个答案:

答案 0 :(得分:2)

处理此问题的最佳方法是通过用户界面 - 如果用户采取某些操作(单击图像),需要在后端进行大量处理,则您的UI应阻止页面上的其他操作向其发送更多消息后端,直到原始请求完成。

在视觉上解决这个问题的方法是禁用/灰化其他元素,明确表示正在进行一些工作(使用微调器,进度条)等。

在服务器端,由于每个HTTP请求都是独立的,因此在服务器上添加逻辑以便能够检测发出当前请求的用户是否还有正在处理的另一个正在进行的请求将会很麻烦且很难。

答案 1 :(得分:1)

您可能需要获取Cookie的帮助。当第一次完成操作时,请写一些cookie。每次都要在处理之前检查该cookie。

您不能简单地从UI禁用链接或按钮,并希望用户无法执行此操作。它总是可以通过多种方式完成。必须进行额外检查。

(我没有完全阅读你的帖子。但是根据我对第一个答案的理解......)

答案 2 :(得分:1)

我有类似的问题,我这样解决了。

我手工编写了ajax调用(而不是jQuery等)。

我有一个全局XMLHTTPRequest。

var xhr = new XMLHTTPRequest();

当用户点击了需要ajax调用的内容时,如果已经在运行,我就中止了之前的调用。

if( xhr.readystate !=0 || xhr.readystate !=4 )
   xhr.abort();

然后创建一个新的XHR实例,开展业务。

xhr = new XMLHTTPRequest();
xhr.open("GET", myUrl, true);
//attach callback function etc and do the send