【发布时间】:2018-03-22 23:27:49
【问题描述】:
我注意到 google chrome 中有一些奇怪的行为:
- 如果我们在没有网络连接的情况下发送 ajax 后请求,我们会在控制台中收到 err_internet_disconnected 异常(我认为,没关系)
- 如果我们在这个请求期间发送了长的 ajax 请求并失去了网络连接,谷歌浏览器不会中止它,控制台和 devconsole 的网络选项卡中没有 err_internet_disconnected 异常,这个请求被标记为待处理(即使在连接出现之后) .事实上,这个连接挂了,没有机会在 js 代码中处理这个(我们期望得到 ajax 错误,但没有任何反应)。
您对如何处理这种行为有什么建议吗?
编辑: 代码示例:
$.ajax({
url: "https://someserver.com/ws.asmx/ExecuteEx?pureJson",
type: "POST",
contentType: "application/json",
data: data,
success: function() {
console.log("success");
},
error: function() {
console.log("error");
}
})
我在编辑这篇文章时在此页面的 chrome 开发控制台中尝试了此代码。截图如下。 第一个请求是我的。我发送了它,然后拔下网线。 第二个请求失败(因为拔掉了网线)。 然后我插入网线,第三次请求成功。但是第一个请求仍然处于待处理状态(尽管网络连接丢失)。
【问题讨论】:
-
你能发布你的ajax代码吗?
-
@DiskJunky ,是的,我已经编辑了这篇文章
-
您是否设置了
timeout属性?见Set timeout for ajax (jQuery)。如果超时后连接丢失,那应该中止请求。您是否也测试过任何其他浏览器,例如 FireFox 或 IE? -
至少 FireFox 具有相同的行为。我知道“超时”属性,但即使需要数小时来处理服务器上的请求,我们也需要得到结果。但是你提到的 timeout 属性让我知道如何使用 timeout 绕过这个问题。