Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaSpringMVC应用程序中取消以前的操作_Java_Ajax_Spring_Jakarta Ee_Spring Mvc - Fatal编程技术网

如何在JavaSpringMVC应用程序中取消以前的操作

如何在JavaSpringMVC应用程序中取消以前的操作,java,ajax,spring,jakarta-ee,spring-mvc,Java,Ajax,Spring,Jakarta Ee,Spring Mvc,我正在开发一个SpringMVC应用程序。我遇到了一个有趣的案子 为了便于解释,我以顶部的stackover flow按钮为例(我指的是那些问题、标签、用户、徽章、未回答的按钮) 现在在我的应用程序中,我有类似的按钮。当用户单击任何按钮时,它通过传递适当的参数来进行ajax调用。服务器进行sql查询并返回结果 现在假设有一个像我这样的疯狂用户,他不停地点击这些按钮。因此,每次单击都会发出一个ajax调用。而曾经完成它的操作的软件则出现在前端。因此,即使用户在最后一次点击Tags按钮,它也可能会出

我正在开发一个SpringMVC应用程序。我遇到了一个有趣的案子

为了便于解释,我以顶部的stackover flow按钮为例(我指的是那些问题、标签、用户、徽章、未回答的按钮)

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

现在假设有一个像我这样的疯狂用户,他不停地点击这些按钮。因此,每次单击都会发出一个ajax调用。而曾经完成它的操作的软件则出现在前端。因此,即使用户在最后一次点击Tags按钮,它也可能会出现,并且再次点击花费很长时间返回前端的问题可能会覆盖页面。我怎样才能解决这个问题?(我希望标签数据显示为用户上次单击时的数据)

首先,我知道当用户第一次单击问句,然后单击标记时,我不再需要查询sql中的问句按钮。是否有某种方法可以停止处理“sql查询问题”按钮


感谢

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

从视觉上解决这个问题的方法是禁用/灰显其他元素,使某些工作(使用微调器、进度条)正在进行,等等


在服务器端,由于每个HTTP请求都是独立的,因此在服务器上添加逻辑以检测发出此当前请求的用户是否正在处理另一个正在进行的请求将非常麻烦和困难。

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

从视觉上解决这个问题的方法是禁用/灰显其他元素,使某些工作(使用微调器、进度条)正在进行,等等


在服务器端,由于每个HTTP请求都是独立的,因此在服务器上添加逻辑以检测发出此当前请求的用户当前是否有另一个正在处理的请求将非常麻烦和困难。

您可能需要借助cookie。第一次完成操作时,请编写一些cookie。每次,在处理之前检查cookie

您不能简单地禁用UI中的链接或按钮,而希望用户不能这样做。这可以通过多种方式完成。必须进行额外的检查


(我还没有完全阅读你的帖子。但是从第一个答案中我了解到…

你可能需要借助cookies。当第一次完成操作时,写一些cookie。每次,在处理之前检查cookie

您不能简单地禁用UI中的链接或按钮,而希望用户不能这样做。这可以通过多种方式完成。必须进行额外的检查


(我还没有完全阅读你的帖子。但是从第一个答案中我了解到…

我也遇到了类似的问题,我就是这样解决的

我手工编写了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

我也遇到过类似的问题,我就是这样解决的

我手工编写了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

我的页面中有很多地方可以进行ajax调用。是否有一些简单的方法可以在ajax调用完成之前禁用其他所有内容。@JavaMan您可以查看一个显示工作正在处理的模式对话框。这样,在调用返回之前,所有内容都将被禁用。我的页面中有很多地方可以进行ajax调用。是否有一些简单的方法您可以查看一个显示正在处理工作的模式对话框。这样,在调用返回之前,所有内容都将被禁用。使用这种方法,服务器仍在处理不必要的请求。您找到解决方案了吗?如果您看到,我的代码使用了
get
,我的impl on server是幂等的,所以我从不担心服务器处理调用。我相信你也有同样的情况,因为你给出了按钮的示例,它们是普通的
GET
。如果你的ajax调用不是幂等的,那就完全是另一回事了。但是更多的细节肯定可以帮助你决定该做什么。通过这种方法ll server正在处理不必要的请求。你有解决方案吗?如果你看到,我的代码使用了
get
,我的impl-on-server是幂等的,所以我从不担心服务器处理调用。我相信你也有相同的情况,因为你给出了按钮的示例,它们是纯
get
。如果你的ajax呼叫不是幂等的,这是一个完全不同的球赛。但更多的细节肯定可以帮助决定该做什么。