停止Ajax请求以及Spring中控制器上启动的进程

时间:2015-09-08 07:03:34

标签: java jquery ajax spring spring-mvc

我正在使用Spring MVC并且我已经创建了控制器并且我使用JQuery Ajax请求访问它们,但有时可能该过程需要很长时间,所以我想给用户选项来停止请求为此,我使用JQuery的中止功能,它成功停止Ajax请求,但它不会停止在控制器上启动进程。还有其他办法吗?

4 个答案:

答案 0 :(得分:1)

如果请求已经发送到服务器,那么即使我们中止请求,服务器也会处理请求,但客户端不会等待/处理响应。

也许你必须编写一些自定义逻辑,在每个这样的ajax调用中为控制器启动一个线程并跟踪它们的线程ID。然后在中止请求中返回控制器并杀死该线程。

只是一个基本的想法,我自己没有实现它,所以不确定你可能面临的代码/逻辑问题。

答案 1 :(得分:0)

声明一个变量来存储ajax请求

var req = $.ajax({
    type: 'GET',
    url: '<*url*>',
    ......
});

我们可以使用我的请求.abort()

req.abort();

检查参考jQuery ajax

答案 2 :(得分:0)

你的jQuery的abort()会阻止客户端监听响应,但服务器仍会处理。

我能想到一些事情:(我希望这个过程足够让你顺便停下来)

  • 使用线程进行连续轮询。具有以高频率读取的状态标志,以便在执行中止时更新要停止的请求的状态。如果启用了连续轮询,则可以检查现在是否中止状态并且线程已停止或类似的情况。

答案 3 :(得分:0)

如果您不使用任何自定义逻辑,则无法在控制器级别停止正在进行的过程。因为控制器进程和UI进程是两个不同的层,它们之间唯一的连接是套接字请求 - 响应连接。

在javascript端中止可能会给你的应用程序带来很大的风险,后端将完成整个过程,但是我不会意识到这一点。您可以在控制器端管理响应时间并返回错误并使用您自己的逻辑中止控制器进程。例如,如果你在Controller上有一些循环时间,或者你有另一个套接字连接,比如db根据超时参数配置你的连接。

您想要做的是与您的控制器实施直接相关。