0

控制器:处理回发的代码在 biz 层中有一个长期运行的 db 调用。30 分钟后,浏览器显示来自 ajax 调用的错误消息,但是我的 db 日志显示 db 方法仍在运行 - 运行超过 30 分钟标记。

我的 ?当控制器仍在等待来自 biz 层的反馈时,控制器中没有引发 ajax 错误是如何引发的 [log4j 没有显示任何被捕获的错误]。

在tomcat中调整超时有帮助吗?我认为不是,因为应用程序仍在处理

我的观点:

function runAjax(){
    $.ajax({
        type: "POST",
        url: "Test.html",
        data: { testparam1,testparam2},
        success: function(data){
            document.getElementById("processdata").innerHTML="Success";
        },
        error: function(request){
            document.getElementById("processdata").innerHTML="Error";
        }
        });
}
4

1 回答 1

0

浏览器,也就是 JavaScript,不会永远等待响应。一段时间后(在这种情况下读取 30 分钟),它会放弃请求,认为服务器没有响应。HTTP 并没有真正设置为处理超过 30 分钟的请求,至少不是通过正常方式。

有一些选择。首先,您可以优化您在后端所做的任何事情以使其更快。我的意思是,如果运行查询需要 30 多分钟,那么您可能需要重新考虑一下您的 SQL 方法。

其次,您可以简单地分解这些步骤,以便您可以运行每个步骤、验证,然后运行下一个步骤。根据您正在做的事情,这可能会打开并行执行某些工作的可能性,从而加快进程。这里的挑战是在失败的情况下回滚。

第三,您可以实现 Pub/Sub 模型。有几个框架可以为 JavaScript 进行 Pub/Sub。我个人使用过 Atmosphere,它有一个不错的 jQuery 插件,当浏览器中没有更高级的方法时,它会回退到更多的 HTTP 常规方法。在此模型中,您的视图将提交请求,后端将排队工作并告诉视图订阅特定队列/通道以获取结果。View 可以简单地等待响应。

第四,你可以发布请求,有一个中间页面,它只是通过 JavaScript 不断刷新,直到后端说“好的,我们完成了!”。许多较旧的 Web 应用程序曾经为长时间运行的事务执行此操作。

我相信您可能还可以使用 1000 多个选项,但是如果您的请求总是需要很长时间才能运行,我认为 AJAX 不适合您。

于 2013-03-01T14:49:05.167 回答