连接丢失后,ajax请求在chrome中挂起

时间:2017-10-11 10:17:46

标签: jquery ajax

我注意到Google Chrome中存在一些奇怪的行为:

  • 如果我们在没有网络连接的情况下发送ajax请求,我们会在控制台中获得err_internet_disconnected异常(我认为,没关系)
  • 如果我们在此请求期间发送长期发布的ajax请求并丢失网络连接,则谷歌浏览器不会中止它,控制台和devconsole的网络选项卡中没有err_internet_disconnected异常此请求被标记为待处理(即使出现连接后)。事实上,这个连接挂起,没有机会在js代码中处理它(我们希望得到ajax错误,但没有任何反应)。

您对如何处理此行为有任何建议吗?

EDITED: 代码示例:

$.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 dev控制台中尝试了此代码。屏幕截图如下。 第一个请求是我的。我发了它,然后拔掉了网线。 第二个请求失败(因为未插入网络电缆)。 然后我插入网络电缆,第三个请求成功。但是第一个请求仍然具有待处理状态(尽管网络连接丢失)。

devconsole's network tab

2 个答案:

答案 0 :(得分:0)

尝试替换$中的错误函数。 Ajax({使用此代码并比较结果

error: function (request, status, error) {
        console.log(request.responseText);
        console.log(request.status);
        console.log(request.error);
    }

我希望有所帮助。

答案 1 :(得分:0)

设置timeout属性。如果在超时结束后连接丢失,那应该中止请求。

$.ajax({
   url: "https://someserver.com/ws.asmx/ExecuteEx?pureJson",
   type: "POST",
   contentType: "application/json",
   data: data,
   timeout: 1000, // value in milliseconds
   success: function() {
      console.log("success");
   },
   error: function() {
      console.log("error");
   }
})

另见ajax documentation

  

<强>超时

     

设置请求的超时(以毫秒为单位)。值为0表示不会超时。这将覆盖使用$ .ajaxSetup()设置的任何全局超时。超时时间从$ .ajax调用点开始;如果其他几个请求正在进行且浏览器没有可用的连接,则请求可能会在发送之前超时。