Java with ajax - ERR_EMPTY_RESPONSE - Ajax响应在服务器处理请求时抛出错误

时间:2016-06-15 12:16:49

标签: java jquery ajax

我在浏览器控制台中遇到错误。

  

无法加载资源:net :: ERR_EMPTY_RESPONSE

我的ajax调用适用于所有按钮点击,但此错误仅适用于一个按钮(例如 testExt 按钮)。点击这些按钮,后台脚本运行并执行一些测试。唯一的区别是这个 testExt 需要更多的时间来完成它的执行(接近4分27秒)但是响应在ajax的error块中以4分16秒到达客户端当脚本在服务器端成功执行时。

控制台显示以下错误:

Object {readyState: 0, responseText: "", status: 0, statusText: "error"}

Ajax代码:

$.ajax({  
    type : "Get",   
    url : "resultValue.htm", 
    cache: false,
    data : "testName=" + name,  
    success : function(response) { 
        // success logic here
    },
    error: function(jqXHR, textStatus){
        console.log(jqXHR);
        alert('There has been server side error. Please contact TechEng team to get this fixed.')
    }
}); 

从此类请求返回的响应只是一个行字符串:

  

/xxxx/reports/2016-06-15/07-03-53-237-r1Qn/xxx-smoketest-report.html

我搜索了一些有关SO的问题,但我不确定它是否是服务器端的java内存问题,因为我也试图增加内存大小。请帮我理解出了什么问题。我是否错过了处理此ajax请求的某些方案

当我直接点击服务器API时,我会在浏览器上收到以下响应:

火狐:

response on Firefox

response on Chrome

1 个答案:

答案 0 :(得分:4)

听起来好像你正在遇到某种超时。有许多地方可以超时4分钟的请求 - 浏览器,Web服务器,应用程序服务器......甚至可能是网络设备和操作系统。通常,最低超时值由Web服务器设置。

听起来像你在tomcat上运行,我不太熟悉,但你可以在https://tomcat.apache.org/connectors-doc/common_howto/timeouts.html找到一些好的信息。可能有一种方法可以配置asyncTimeout

之类的内容

然而,我会重申我先前的评论(我知道你已经注意到了):

  

我还要提出使用服务工作者或其他一些机制(例如民意调查)的建议@ DelightedD0D。 AJAX并不是真的为这么长的请求而构建,所以你可能会遇到其他问题。

即使是我指出的文档也建议不要将这些文档设置为极值。

正如我所提到的,听起来你走的是与你的评论不同的路线:

  

@TheMadDeveloper DelightedD0D:根据你们的建议我想在这个场景中使用websocket。你认为这是个好主意吗?虽然我卡住了stackoverflow.com/questions/37940540 /

我认为这是一个明智的决定,虽然websockets可能有点过分。从我收集的内容来看,您并不需要服务器和客户端在执行任务时始终在说话。真的,你只想知道它什么时候结束。

如果你没有在websocket路径上走得太远,你可以看看Server-Sent Events(SSE)。

This post有一些特定于Tomcat的信息。 Also see this post用于SSE和websockets的详细比较。

希望有所帮助!