在Javascript

时间:2017-04-15 02:08:40

标签: javascript jquery ajax http

在我的Web应用程序中,我正在尝试在调用REST API时处理超时情况。这是我使用jQuery ajax调用API的代码。

$.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 个答案:

答案 0 :(得分:0)

这看起来与这篇文章非常相似。祝好运! How to detect timeout on an AJAX (XmlHttpRequest) call in the browser?