Tôi có một angularJs "hủy" $http
gọi như thế này:Xác định nếu AJAX bị hủy hoặc có một lỗi trong AngularJs chặn
var defer = $q.defer()
$http.post("http://example.com/someUrl", {some: "data"}, {timeout: defer.promise})
Và tôi hủy rằng yêu cầu ajax sử dụng defer.resolve()
vì một số logic đòi hỏi nó.
Một số nơi khác trong mã của tôi, tôi có một iterceptor như thế này:
angular.module("services.interceptor", arguments).config(function($httpProvider) {
$httpProvider.interceptors.push(function($q) {
return {
responseError: function(rejection) {
if(rejection.status == 0) {
alert("check your connection");
}
return $q.reject(rejection);
}
};
});
});
});
Vấn đề:
Nếu có một kết nối vấn đề Internet , ajax thất bại với trạng thái 0 và thiết bị đánh chặn bắt nó. Nếu ajax bị hủy bỏ bởi lời hứa hết thời gian chờ , ngoài trạng thái cũng là 0 và thiết bị chặn sẽ bắt được.
Tôi không thể tìm hiểu xem nó bị hủy hay gặp lỗi trong trình xử lý responseError
.
cách tiếp cận ngây thơ của tôi là để kiểm tra xem thời gian chờ được định nghĩa như thế này:
responseError: function(rejection) {
if(rejection.status == 0 && !rejection.config.timeout) {
alert("check your connection");
}
return $q.reject(rejection);
}
Nó chỉ đảm bảo rằng, có là một điều kiện thời gian chờ theo yêu cầu đó, không nó không thành công vì nó. Nhưng tốt hơn là không có gì.
Có cách nào thực sự hiệu quả để xác định xem ajax có bị lỗi hoặc bị hủy không?
Tôi đang sử dụng AngularJs 1.1.5
Bạn có thể lấy mã trạng thái HTTP? –
@DavinTryon Trong cả hai trường hợp, hủy bỏ và mã trạng thái lỗi mạng trả về là 0. –
Bắt chính xác vấn đề này vào lúc này (với góc 1.2.0) – Phantomwhale