如何获得$ http readyState,使用如下:
var request, interval;
request = $http
.post('/user/info', {...})
.success(...);
interval = setInterval(function(){
if(request.readyState < 3)
return;
prepare(request.data, request.headers);
clearInterval(interval)
}, 10);
function prepare(data, headers){
...
}
我不知道如何在不更改angular.js文件的情况下执行此操作。是否可以通过$ httpBackend或其他东西为服务添加一些功能?
答案 0 :(得分:1)
使用AngularJS 1.5.5,添加了对XHR事件的其他处理的支持:
$ http Arguments - Config
描述要进行的请求以及如何处理的对象。该对象具有以下属性:
- eventHandlers -
{Object}
- 要绑定到XMLHttpRequest object的事件侦听器。要将事件绑定到XMLHttpRequest
上传对象,请使用uploadEventHandlers
。处理程序将在$apply
块的上下文中调用。- uploadEventHandlers -
{Object}
- 要绑定到XMLHttpRequest upload object的事件侦听器。要将事件绑定到XMLHttpRequest
对象,请使用eventHandlers。处理程序将在$apply
块的上下文中调用。
使用配置对象的eventHandlers
属性添加一个获取XHR readyState
的事件处理程序:
angular.module("app",[])
.run(function($rootScope, $http){
var eventHandlers = {readystatechange: readyStateChangeHandler};
var config = { eventHandlers: eventHandlers };
$rootScope.messageList = [];
function readyStateChangeHandler(ev) {
var message = "readyState: "+ev.target.readyState;
console.log(message);
$rootScope.messageList.push(message);
}
$http.get("//httpbin.org/anything",config)
.then(function(response){
console.log("OK");
//console.log(response);
}).catch(function(response){
console.log("ERROR");
//console.log(response);
})
})
&#13;
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="app">
<div ng-repeat="m in messageList">
{{m}}
</div>
</body>
&#13;