2017-10-11 150 views
2

我已经注意到谷歌浏览器的一些奇怪的行为:Ajax请求挂在Chrome浏览器后连接丢失

  • 如果我们发送POST Ajax请求时,有没有网络连接,我们得到的控制台err_internet_disconnected异常(和我认为,这是确定)
  • 如果我们给长岗Ajax请求,失去这个请求,谷歌Chrome不会中止它,就在控制台和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浏览器开发控制台这段代码在这个页面在编辑这篇文章。屏幕截图如下。 第一个请求是我的。我发送了它,然后拔掉了网线。 第二个请求失败(因为拔下网线)。 然后我插入网线,第三个请求成功。但是第一个请求仍然有未决状态(尽管网络连接丢失)。

devconsole's network tab

+0

您可以发布您的Ajax代码? – DiskJunky

+0

@DiskJunky,是的,我已经编辑这篇文章 – SkillZ

+0

你有没有设置'timeout'财产?查看[为Ajax设置超时(jQuery)](https://stackoverflow.com/questions/5225597/set-timeout-for-ajax-jquery)。如果超时过期后连接丢失,应该中止请求。你有没有测试任何其他浏览器如FireFox或IE? – Igor

回答

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

timeout

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

0

尝试更换到$误差函数。阿贾克斯({与此代码,并比较结果

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

我希望帮助。

+0

它没有帮助( – SkillZ

相关问题