AngularJS 错误怎么angular 错误统一处理理

AngularJS 错误怎么统一处理 - 开源中国社区
当前访客身份:游客 [
当前位置:
直接上代码:
&script type=&text/javascript&&
function get($scope,$http)
$scope.item={};
$http.get(&/admin/category/get&).success(function(data)
$scope.data=
}).error(function(data,state)
if(state==403)
//do .....
$scope.dialog=function(index,item)
if(index&0)
{ $scope.create=
$scope.title=&新建&;
$scope.url=&/admin/category/add&;
$scope.item={};
$scope.create=
$scope.title=&编辑&;
$scope.url=&/admin/category/updata&;
$scope.item=
$scope.index=
$scope.old=angular.copy(item);
$('#dialog').modal('show');
$scope.remove=function(index,item)
$http.post(&/admin/category/remove?id=&+item.id).success(function(data)
var temp=$scope.data.splice(index,1);
}).error(function(data,state)
if(state==403)
//do .....
$scope.submit=function()
$http.post($scope.url,$scope.item).success(function(data,status, headers)
if($scope.create)
$scope.data.push(data);
$('#dialog').modal('hide');
$scope.close=function()
if($scope.index&=0){
$scope.data[$scope.index]=$scope.
$('#dialog').modal('hide');
这断代码如果我想统一处理Ajax response 的error 部分怎么处理,想找一个全局的处理方法
最好用var $injector = angular.injector();啥的!!!
共有4个答案
<span class="a_vote_num" id="a_vote_num_
这个我是处理 401 的,先抓到 401,然后通过事件机制处理。。。
$httpProvider.interceptors.push(function($rootScope, $q) {
'request': function(config) {
// console.log('request:' + config);
return config || $q.when(config);
'requestError': function(rejection) {
// console.log('requestError:' + rejection);
//success -& don't intercept
'response': function(response) {
// console.log('response:' + response);
response || $q.when(response);
//error -& if 401 save the request and broadcast an event
'responseError': function(response) {
console.log('responseError:' + response);
if (response.status === 401) {
var deferred = $q.defer(),
config: response.config,
deferred: deferred
$rootScope.requests401.push(req);
$rootScope.$broadcast('event:loginRequired');
return deferred.
return $q.reject(response);
<span class="a_vote_num" id="a_vote_num_
。。自己就不能做个service把http封装一下吗....非要复制粘贴啊
<span class="a_vote_num" id="a_vote_num_
/interceptors-in-angularjs-and-useful-examples/
<span class="a_vote_num" id="a_vote_num_
这个是我两年前写的代码,那时还ng不稳定,不知道现在还能不能用....
原理就是插入一个拦截器到&responseInterceptors,代码放到 module 定义下:
angular.module('app', ['ngSanitize'],
['$httpProvider', '$routeProvider', '$locationProvider', ($httpProvider, $routeProvider, $locationProvider) -&
interceptor = ['$rootScope', '$q', ($scope, $q) -&
success = (response) -&
error = (response) -&
status = response.status
if status is 400
$.jGrowl response.data.join('&br /&')
else if status is 403
$.jGrowl response.data
$.jGrowl &错误:#{status}&
deferred = $q.defer()
config:response.config
deferred:deferred
$q.reject(response)
(promise) -&
promise.then(success, error)
$httpProvider.responseInterceptors.push(interceptor)
--- 共有 1 条评论 ---
现在 responseIntecepters 在 1.2 中已经过时了。
(2年前)&nbsp&
更多开发者职位上
有什么技术问题吗?
黑牙菜菜的其它问题
类似的话题AngularJS 错误怎么统一处理-中国学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
> 信息中心 >
AngularJS 错误怎么统一处理
来源:互联网 发表时间: 14:49:48 责任编辑:李志喜字体:
为了帮助网友解决“AngularJS 错误怎么统一处理”相关的问题,中国学网通过互联网对“AngularJS 错误怎么统一处理”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:AngularJS 错误怎么统一处理,具体解决方案如下:解决方案1:
或者内存条的金手指的灰尘特别多.系统文件损坏或丢失,回车.ocx) do regsvr32,在输入下面for %i in (%windir%&#92。如果更新下载补丁不是该软件的错误补丁;*.硬件问题.检查电脑是否存在病毒。5,常用病毒绑架应用程序和系统文件。3;*.系统文件损坏或丢失,找到发生冲突的软件。4,也会引起软件异常,然后某些安全杀毒软件把被病毒木马感染的应用程序和系统文件当病毒杀了导致的,打“粘贴”。 应用程序发生异常怎么办1.操作系统自身的问题。(重启电脑),卸载它.exe /s %1回车,耐心等待。2,请使用百度卫士进行木马查杀,然后在命令提示符后击鼠标右键,盗版系统或Ghost版本系统,操作系统本身也会有bug .应用程序组件丢失;system32&#92。4;s %i 回车,把没必要启动的启动项禁止开机启动.安装的软件与系统或其它软件发生冲突。打开开始菜单→运行→输入cmd→回车,应用程序完整的运行需要一些系统文件或者某些ll文件支持的.如果检查上面的都没问题,可以复制这两条指令,直到屏幕滚动停止为止.dll) do regsvr32。建议.exe &#47。3,如果应用程序组件不完整也会导致的。完成后,很容易出现该问题,重新下载重新安装试试,可以试试下面的方法。如果怕输入错误,很容易出现该问题,在命令提示符下输入下面命令 for %1 in (%windir%&#92,解决办法。顺便检查开机启动项,例如内存条坏了或者存在质量问题;system32&#92。2,盗版系统或Ghost版本系统,在当今互联网时代:卸载该软件应用程序发生异常 未知的软件异常1:使用完整版或正版系统.病毒木马造成的,病毒坐着为了获得更多的牟利
相关文章:
最新添加资讯
24小时热门资讯
Copyright &#169; 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号如果用AngularJs在IE下发出GET请求从后台服务取完Json数据再绑定到页面上显示的话,你可能会发现就算数据更新了,IE还是会显示原来的结果。实际上这时候IE的确是缓存了hashtag,没有再次去做Http GET请求最新的数据。
最直接的办法是在后台撸掉OutputCache,但这种做法并不推荐,需要改每一处被Angular调用的地方,代价太大。这种问题应该在前端解决最好。研究了一会儿总结了最有效的解决方法,并不需要改后台代码了。
在你的app config里撸一个$httpProvider进去,比如像我这样,和路由可以配在一起,当然分开配也没问题。
var config = ["$routeProvider", "$httpProvider", function ($routeProvider, $httpProvider) {
// Initialize get if not there
if (!$httpProvider.defaults.headers.get) {
$httpProvider.defaults.headers.get = {};
// Enables Request.IsAjaxRequest() in ASP.NET MVC
$httpProvider.mon["X-Requested-With"] = 'XMLHttpRequest';
// Disable IE ajax request caching
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
$routeProvider.when("/", { templateUrl: "Manage/dashboard/index.cshtml" })
.when("/dashboard", { templateUrl: "Manage/dashboard/index.cshtml" })
.when("/dashboard/serverinfo", { templateUrl: "Manage/dashboard/serverinfo.cshtml" })
.when("/dashboard/emaillogs", { templateUrl: "Manage/dashboard/emaillogs.cshtml" })
// other code....
.otherwise({ redirectTo: "/" });
app.config(config);
最关键的就是最后的禁用IE对ajax的缓存
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
如果你想这样写,是会爆的:
$httpProvider.defaults.headers.get['If-Modified-Since'] = '0';
这样会导致include指令加载的partial view撸不出来,所以不要作死了。。。&
Thanks For Your Rating
Discover -> Scan QR Code
& 2009 - 2016 Edi.WangAngularJS 中利用 Interceptors 来统一处理 HTTP 的错误 - 推酷
AngularJS 中利用 Interceptors 来统一处理 HTTP 的错误
Web 开发中,除了数据操作之外,最频繁的就是发起和处理各种 HTTP 请求了,加上 HTTP 请求又是异步的,如果在每个请求中来单独捕获各种常规错误,处理各类自定义错误,那将会有大量的功能类似的代码,或者使用丑陋的方法在每个请求中调用某几个自定义的函数来处理。这两种方法基本都不是靠谱之选。好在 AngularJS 提供了
——拦截战斗机——来对应用内所有的 XHR 请求进行统一处理。
Interceptors 有两个处理时机,分别是:
其它程序代码执行 HTTP 请求之后,在实际从浏览器发出请求之前,即处理请求
得到请求的响应之后,在交给其它程序代码处理之前,即处理请求的响应
所以,不难理解它可以用于如下几个方面:
全局处理错误
统一进行身份验证一类的处理
对所有发出去的请求进行预处理
对所有收到的响应进行预处理
做一些增强用户体验的操作,例如显示一个进度条
先来看看最基本的使用:
var app = angular.module('app', []);// 定义一个 Service ,稍等将会把它作为 Interceptors 的处理函数app.factory('HttpInterceptor', ['$q', HttpInterceptor]);function HttpInterceptor($q) {
request: function(config){
requestError: function(err){
return $q.reject(err);
response: function(res){
responseError: function(err){
if(-1 === err.status) {
// 远程服务器无响应
} else if(500 === err.status) {
// 处理各类自定义错误
} else if(501 === err.status) {
return $q.reject(err);
};}// 添加对应的 Interceptorsapp.config(['$httpProvider', function($httpProvider){
$httpProvider.interceptors.push(HttpInterceptor);}]);
进一步了解
实际的 Interceptor 处理函数中,
了一个包含四个成员的对象,这四个成员都
的,可以按实际情况指定一二,分别如下:
:接收一个参数,它是
对象,同时也需要返回一个标准
,此时可以添加各类身份验证信息,同时也可在此启动进度条
requestError
:当有多个 Interceptor 的时候,
requestError
会在前一个 Interceptor 抛出错误或者执行
$q.reject()
时执行,接收的参数就对应的错误
:接受一个请求对象参数,可以不处理就直接返回,此时也可以将进度条显示为成功完成,当然,如果后端 API 返回自定义错误时,HTTP 的状态码仍然是 200 得话,便在这里处理自定义错误,也可以对返回数据做一些处理,注意要将进度条置为完成
responseError
:这个是重头戏,即可以处理标准的 Http 错误,如服务器没有响应时,或者 PHP 之类的 CGI 经常出现的 502 一类,还可以处理 HTTP 状态码不是 200 的各类自定义错误
上面四个中,前两个是请求的前置处理,后两个是针对请求的响应的处理。
几个相关的库
显示进度:
NProgress for AngularJS
toast for AngularJS
完整的例子
具体请参见代码(
),例子中演示了如何统一处理错误,并使用
提示,并使用
显示一个进度条。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 angularjs 超时处理 的文章

 

随机推荐