Netbean 6.9.1
GlassFish 3.0.1
jQuery 1.6.2
我正在测试我的网络应用程序的超时情况。
我对“超时”的理解是在发送Ajax请求时,如果花了指定的时间(如30秒),则会触发超时回调函数。
我也读过jQuery Timeout:
timeoutNumber
设置请求的超时(以毫秒为单位)。这将覆盖使用$ .ajaxSetup()设置的任何全局超时。超时时间从$ .ajax调用点开始;如果其他几个请求正在进行且浏览器没有可用的连接,则请求可能会在发送之前超时。在jQuery 1.4.x及更低版本中,如果请求超时,XMLHttpRequest对象将处于无效状态;访问任何对象成员可能会抛出异常。仅在Firefox 3.0+中,超时无法取消脚本和JSONP请求;即使在超时时间之后到达,脚本也会运行。
但是当我测试超时时,调用错误函数并且当txtStat应该是“超时”时显示“错误”。这是我的测试步骤:
测试步骤:
预期结果:
发送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");
}
});
答案 0 :(得分:4)
事实上,您对请求超时的理解并不完全正确。当请求超过一定时间时会发生超时,但是当服务器关闭时,您会发现响应立即返回。只需在浏览器中尝试导航到未运行的Web应用程序页面即可。例如:
立即完成,因为浏览器甚至无法连接。
要导致超时条件,请保持服务器正常运行,但请求一个类似Thread.sleep(60000)
的页面 - 服务器将接受请求,但在配置的ajax时间用完之前不发送响应。
是超时:当接受请求但未及时发送响应时。