jQuery ajax txtStat不返回“超时”但是“错误”

Netbean 6.9.1 GlassFish 3.0.1 jQuery 1.6.2 

我正在测试我的网络应用程序的超时情况。

我对“超时”的理解是在发送Ajax请求时,如果花费了指定的时间(如30秒),则会触发超时回调函数。

我也读了jQuery Timeout:

timeoutNumber

设置请求的超时(以毫秒为单位)。 这将覆盖使用$ .ajaxSetup()设置的任何全局超时。 超时时间从$ .ajax调用点开始; 如果其他几个请求正在进行且浏览器没有可用的连接,则可以在请求发送之前超时。 在jQuery 1.4.x及更低版本中,如果请求超时,XMLHttpRequest对象将处于无效状态; 访问任何对象成员可能会抛出exception。 仅在Firefox 3.0+中,超时无法取消脚本和JSONP请求; 即使在超时期限后到达,脚本也会运行。

但是当我测试超时时,调用错误函数并且当txtStat应该是“超时”时显示“错误”。 这是我的测试步骤:

测试步骤:

  1. 启动Glassfish服务器
  2. 转到测试页面(foo.jsp)
  3. 停止Glassfish服务器
  4. 单击foo.jsp上的按钮发送ajax请求。

预期结果:

发送Ajax请求但无法访问服务器并调用错误回调函数,其参数:txtStat应具有值“timeout”。

实际结果:

调用错误回调函数,其参数:txtStat的值为“error”

那么这种预期的行为还是我对超时的理解错了?

我的ajax代码:

 $.ajax({ url: "../resources/plan/list/some", type: "get", dataType: "json", timeout: 30000, success: function(data, txtStat, xhr) { console.log("success") }, error: function(xhr, txtStat, errThrown) { if(txtStat === "timeout") { console.log("timeout"); } else { //txtStat === "error", "abort", "parseerror" console.log(txtStat); } }, complete: function(xhr, txtStat) { console.log("completed"); } }); 

实际上,您对请求超时的理解并不完全正确。 当请求超过一定时间时会发生超时,但是当服务器关闭时,您会发现响应立即返回。 只需在浏览器中尝试导航到未运行的Web应用程序页面即可。 例如:

在此处输入图像描述

它立即完成,因为浏览器甚至无法连接。

要导致超时条件,请保持服务器正常运行,但请求一个类似Thread.sleep(60000) – 服务器将接受请求,但在配置的ajax时间用完之前不发送响应。

是一个超时:当一个请求被接受,但没有及时发送响应。