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时,我在浏览器上得到以下响应:
火狐:
铬
听起来好像你正在遇到某种超时。 有许多地方可以超时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的详细比较。
希望有所帮助!