【问题标题】:application ajax time out应用程序 ajax 超时
【发布时间】:2013-02-28 21:42:12
【问题描述】:

控制器: 处理回发的代码在 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";
        }
        });
}

【问题讨论】:

  • 是的,你需要修复这个服务器端。

标签: ajax spring-mvc


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2012-08-07
    • 2011-10-01
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多