Javascript 捕获“;没有互联网连接“;在AngularJS
我希望我的AngularJS应用程序能够捕获“无互联网连接”,就像Chrome捕获它一样。当Chrome捕捉到它时,它会在console.log上显示net::ERR_INTERNET_DISCONNECTED Angular的HTTP侦听器无法捕获它。我得到的唯一数据是 拒绝。数据。状态未定义Javascript 捕获“;没有互联网连接“;在AngularJS,javascript,angularjs,Javascript,Angularjs,我希望我的AngularJS应用程序能够捕获“无互联网连接”,就像Chrome捕获它一样。当Chrome捕捉到它时,它会在console.log上显示net::ERR_INTERNET_DISCONNECTED Angular的HTTP侦听器无法捕获它。我得到的唯一数据是 拒绝。数据。状态未定义 rejection.status 0一个简单的脚本可以帮助您,您可以用不同的方式来完成,甚至可以在失败时加载图像并调用函数 function getNetworkStatus(callback, tim
rejection.status 0一个简单的脚本可以帮助您,您可以用不同的方式来完成,甚至可以在失败时加载图像并调用函数
function getNetworkStatus(callback, timeout, x){
x = new XMLHttpRequest();
x.timeout = timeout,
x.onreadystatechange = function(){
x.readyState == 4 && callback(x.status == 200)
}, x.onerror = function(e){
callback(!1)
}, x.ontimeout = function(){
callback(!1)
}, (x.open("GET", "http://ip-api.com/json/"), x.send());
}
getNetworkStatus(function(isOnline){
console.info(isOnline ? "ONLINE" : "OFFLINE");
},60000);
更新
我们在httpProvider中定义了这个拦截器,所以当调用没有成功发生时,严格地返回一个错误
angular.module('MyApp', []).config([
'$httpProvider',
function($httpProvider) {
$httpProvider.interceptors.push([
'$q',
function($q) {
return {
responseError: function(res){
console.info("Failed to open url: " + res.config.url, res);
//Angular returns "success" by default, but we will call "error" if data were not obtained.
if(res.data == null && res.status === 0 && res.statusText === ""){
return $q.reject(res) //callback error()
}
return res //return default success()
}
};
}
]);
}
]).run(['$http', function($http) { // --TEST--
//$http.get("http://ip-api.com/json/").success(function(){ //page online
$http.get("https://ip-api.com/json/").success(function(){ //try "https" (page offline to test)
console.info("My great page is loaded - We are online :)",arguments)
}).error(function(){
console.info("ERROR: My great online page is not loaded :/ - possibility of connection loss?",arguments)
});
}]);
您可以更改您认为永远不会脱机的受信任URL,例如Google,但请记住,该URL应该具有源站访问权限,并且不会显示“访问控制允许源站”错误。没问题。到目前为止,这一切都很顺利。我注意到,当它无法联系任何东西时,状态为0。这是在我的http拦截器中
responseError: function (rejection) {
if (rejection.status == 0) {
// put whatever behavior you would like to happen
}
// .......
return $q.reject(rejection);
}
可能的重复将起作用,但在我向自己的REST端点调用发送请求时不会起作用。我现在要做的是停止我们的Apache服务,看看我的重新启动语言在API调用后会得到什么。检查我的更新,使用“http://ip-API.com/json/和“https://ip-API.com/json/进行测试以离线测试页面YUP,这与我上面写的解决方案相同。
xmlhttprequest.status
在较旧的浏览器上,由于某些边缘案例CORS请求失败,有时会为0。我想你可以考虑“接触失败”,但我认为这是值得注意的。谢谢你的信息。我会注意的。可能很迂腐,但使用拒绝。状态===0
,进行严格比较:)