2017-04-15 261 views
0

在我的Web应用程序中,我试图在调用REST API时处理超时情况。这是我使用jQuery ajax调用API的代码。在Javascript中通过浏览器处理HTTP请求超时

$.ajax({ 
      type: "POST", 
      url: endpoint, 
      data: payload, 
      dataType: dataType, 
      timeout: 0, 
      success: successHandler, 
      error: failureHandler 
     }); 

成功和失败处理程序如下所示。

function successHandler(data) { 
    //Got the data 
} 

function failureHandler(xhr, textStatus, thrownError) { 
    if(xhr.status==404) { 
     console.log('Page not found'); 
    } else if(xhr.status==408) { 
     console.log('request timed out at server. You may want to retry') ;  
    } 
} 

如果超时发生在服务器,它给状态408.但有时,由于网络连接问题,在客户端(浏览器)本身是越来越超时,因为它不能连接到服务指定时间。我想这是浏览器的行为。如果请求被浏览器超时,那么xhr.statustextStatus会是什么?如何处理这种情况?

[编辑]我在Set timeout for ajax (jQuery)找到了一些解释。这解释了我们如何在代码中设置超时。但我的问题是,我不想像这样设置超时。检查ajax请求中的代码,我设置了timeout: 0这意味着,没有超时,我要等到我得到服务器的响应。同时,浏览器可能会因为全局超时设置而终止该请求。我正在寻找可以解决这个问题的解决方案。

+1

[如何在浏览器中检测AJAX(XmlHttpRequest)调用的超时?](http://support.microsoft.com/kb/1818705/how-to-detect-timeout-on-an- ajax-xmlhttprequest-call-in-the-browser) – APerson

+0

添加我的解释为什么这个问题是不同的? –

回答