gpt4 book ai didi

jQuery ajax txtStat 不返回 "timeout"而是 "error"

转载 作者:行者123 更新时间:2023-12-01 07:25:45 25 4
gpt4 key购买 nike

Netbean 6.9.1
GlassFish 3.0.1
jQuery 1.6.2

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

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

我也读过 jQuery Timeout:

超时编号

设置请求的超时(以毫秒为单位)。这将覆盖使用 $.ajaxSetup() 设置的任何全局超时。超时时间从调用 $.ajax 时开始;如果多个其他请求正在进行中并且浏览器没有可用的连接,则请求在发送之前可能会超时。在 jQuery 1.4.x 及以下版本中,如果请求超时,XMLHttpRequest 对象将处于无效状态;访问任何对象成员都可能引发异常。仅在 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 应用程序未运行时仅在浏览器中导航到该页面。例如:

enter image description here

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

要导致超时情况,请保持服务器运行,但请求执行类似 Thread.sleep(60000) 的页面– 服务器将接受请求,但在配置的 ajax 时间用完之前不会发送响应。

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

关于jQuery ajax txtStat 不返回 "timeout"而是 "error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9713471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com