Java with ajax – ERR_EMPTY_RESPONSE – 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时,我在浏览器上得到以下响应:

火狐:

对Firefox的回应

对Chrome的回复

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

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

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

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

甚至我指出的文档建议不要将这些设置为极值。

正如我所提到的,从你的评论来看,这听起来似乎一条不同的路线:

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

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

如果您没有在websocket路径上走得太远,您可以查看服务器发送事件 (SSE)。

这篇文章有一些特定于Tomcat的信息。 另请参阅此文章 ,了解SSE和websockets的详细比较。

希望有所帮助!