繁体   English   中英

带有ajax的Java-ERR_EMPTY_RESPONSE-服务器处理请求时Ajax响应引发错误

[英]Java with ajax - ERR_EMPTY_RESPONSE - Ajax response throws error while server is processing the request

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

无法加载资源:net :: ERR_EMPTY_RESPONSE

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

控制台显示以下错误:

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/

我认为这是一个明智的决定,尽管websocket可能有点过分。 据我了解,在执行任务时,您实际上并不需要服务器和客户端保持不断的交谈。 真的,您只想知道何时完成。

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

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

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM