捕获”;没有互联网连接”;AngularJS中
capture "no internet connection" in AngularJS
我希望我的AngularJS应用程序捕获"无互联网连接",就像Chrome捕获它一样。当Chrome捕获它时,它会在console.log上显示net::ERR_internet_DISCONNECTED。
Angular的HTTP拦截器无法捕获它。我得到的唯一数据是rejection.data.status未定义拒绝状态0
到目前为止,这一切都很顺利。我注意到,当它无法联系任何东西时,状态为0。这是在我的http拦截器中
responseError: function (rejection) {
if (rejection.status == 0) {
// put whatever behavior you would like to happen
}
// .......
return $q.reject(rejection);
}
一个可以帮助您的简单脚本,您可以用不同的方式来完成,甚至可以加载图像并在失败时调用函数。
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,例如谷歌,但请记住,该URL应该具有不显示"访问控制允许来源"错误的来源访问权限。http://ip-api.com/json/可以。
相关文章:
- javascript/angularjs 将 String 与 number for loop 连接起来
- 无法连接angularjs中的服务功能
- 如何正确地通过angularjs服务连接到套接字
- Socket.IO和AngularJS创建多个连接,如何停止
- 连接angularjs中的两个范围模型
- 捕获”;没有互联网连接”;AngularJS中
- AngularJS:根据变量值进行连接
- AngularjS到ElasticSearch的连接超时
- AngularJs没有连接通过
- 在使用 GULP 任务将所有 JS 连接到单个 JS 文件中时,在 AngularJS 中出错
- 在 AngularJS 中使用数据库 - 我应该在哪里编写数据库连接代码
- 尝试连接 AngularJS $http时出现 mongodb 服务器错误
- Angularjs.如何使用选择框连接表单中的字段.更改选择应更改字段
- Angularjs 将字符串与多复选框连接起来
- 将 AngularJS 连接到情节
- Angularjs 连接两个作用域数组
- AngularJS:连接HTML属性中的角度变量
- AngularJS“连接后端”应用程序没有在编辑对话框上加载数据-使用最新的firebase
- 如何从angularJs连接signalR
- 使用AngularJS连接MySQL数据库