控制器: 处理回发的代码在长期运行的业务层中有一个db调用。 30分钟后,浏览器显示了来自ajax调用的错误消息,但是我的db日志显示db方法仍在运行 - 超过30分钟标记。
我的?是如何在控制器中没有引发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";
}
});
}
答案 0 :(得分:0)
浏览器,即JavaScript,不会永远等待响应。一段时间后(在这种情况下读取30分钟),它将放弃请求,认为服务器没有响应。 HTTP并未真正设置为处理带有>的请求30分钟,至少不是通过正常的手段。
有一些选择。首先,您可以优化在后端执行的任何操作,以使其更快。我的意思是,如果运行查询需要30多分钟,那么您可能需要重新考虑一下SQL方法。
其次,您可以简单地分解步骤,以便您可以运行每个步骤,验证,然后运行下一步。根据您的工作情况,这可能会开启并行工作的可能性,从而加快流程。这里的挑战是在事情失败的情况下回滚。
第三,您可以实现Pub / Sub模型。有几个框架用于做Pub / Sub for JavaScript。我个人使用了Atmosphere,它有一个很好的jQuery插件,当浏览器中没有更高级的方法时,它会回退到更多的HTTP传统方法。在此模型中,您的View将提交请求,后端将排队工作并告诉View订阅特定队列/通道以获取结果。 View可以简单地等待响应。
第四,你可以发布请求,有一个简单的页面,只需通过JavaScript刷新,直到后端说“好的,我们完成了!”。许多旧的Web应用程序用于长时间运行的事务。
我相信你可以使用更多的选项,但如果你的请求总是需要很长时间才能运行,我认为AJAX不适合你。