18

我正在使用 Angular 发送一个 http 请求,如下所示。

$http({
    url: url,
    params: params,
    method:'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
    },
    timeout: 60000    //60 seconds
}).success(function(data, status, headers, config) {
    //do something 
}).error(function(data, status, header, config) {
    if(timedout){  //determine occurrence of timeout.
        //invoke timeout handler
    } else  
        //handle other error
    }
});

如何确定超时?

我观察到在这种情况下收到状态代码“0”。检查 status==0 是否安全?

请注意,我不是在询问 HTTP 请求超时(状态码 408)。

4

3 回答 3

19

我已经做到了如下......

var startTime = new Date().getTime();
$http.post(...)
    .success(function(resp, status, header, config) {...})
    .error(function(resp, status, header, config) {
        var respTime = new Date().getTime() - startTime;
        if(respTime >= config.timeout){
            //time out handeling
        } else{
            //other error hanndling
        }
    });
于 2014-01-03T09:29:16.533 回答
6

我刚刚通读了源代码。在$httpBackend的源代码中,xhr.ontimeout没有被处理。他们应该实施xhr.ontimeout.

不幸的是,Angularjs 目前不支持 http 超时处理。:(

于 2013-08-10T05:24:26.833 回答
2

根据Angular 的文档timeout参数以毫秒为单位。

因此,您将其设置为 1 毫秒,这非常低。这可能会使请求在 99.9999% 的情况下失败。

于 2015-12-11T16:24:54.443 回答