Edd*_* Jr 25 httpresponse response-headers angularjs
使用ngResource
在AngularJS 1.2rc(X),我怎么现在得到了状态代码?
RestAPI.save({resource}, {data}, function( response, responseHeaders ) {
});
Run Code Online (Sandbox Code Playgroud)
哪里RestAPI
是我的ngResource
.
响应具有$promise
从服务器返回的对象和资源,但不再具有状态.responseHeaders()
如果服务器将状态代码注入头对象,但该函数仅返回真实的返回状态代码,则该函数仅具有状态.所以有些服务器可能会提供服务,而有些服
Bar*_*two 13
您可以使用promiss回调then
,catch
并finally
在$resource
通话后使用.
例如.如果你想在通话后发现错误,你会做这样的事情:
RestAPI.save({resource}, {data}, callbackFunction).$promise.catch(function(response) {
//this will be fired upon error
if(response.status == 500) alert('Something baaad happend');
}).then(function() {
//this will be fired upon success
});
Run Code Online (Sandbox Code Playgroud)
该response
对象将拥有status
与statusText
性能.status
是一个整数状态代码和statusText
文本.您还将拥有data
包含服务器响应的属性.
编辑:按照建议,它是 response.status
Ara*_*ian 12
您必须在资源声明中添加拦截器.像这样:
var resource = $resource(url, {}, {
get: {
method: 'GET'
interceptor: {
response: function(response) {
var result = response.resource;
result.$status = response.status;
return result;
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
用法:
resource.get(params, function(result) {
console.log(result.$status)
});
Run Code Online (Sandbox Code Playgroud)
默认情况下应该提供IMO状态代码.这个https://github.com/angular/angular.js/issues/8341存在问题
Wor*_*rth -1
我也遇到过类似的问题。我查看了角度库并添加了几行以在响应本身中返回状态。在这个文件中,找到返回承诺的位置。
替换以以下开头的代码块
var Promise = $http(httpConfig).then(函数(响应)
与以下
var promise = $http(httpConfig).then(function(response) {
var data = response.data,
promise = value.$promise;
if (data) {
// Need to convert action.isArray to boolean in case it is undefined
// jshint -W018
if ( angular.isArray(data) !== (!!action.isArray) ) {
throw $resourceMinErr('badcfg', 'Error in resource configuration. Expected ' +
'response to contain an {0} but got an {1}',
action.isArray?'array':'object', angular.isArray(data)?'array':'object');
}
// jshint +W018
if (action.isArray) {
value.length = 0;
forEach(data, function(item) {
value.push(new Resource(item));
});
} else {
copy(data, value);
value.$promise = promise;
}
}
value.status = response.status;
value.$resolved = true;
response.resource = value;
return response;
}, function(response) {
value.status = response.status;
value.$resolved = true;
(error||noop)(response);
return $q.reject(response);
});
Run Code Online (Sandbox Code Playgroud)
或者你可以添加这一行
value.status = response.status;
Run Code Online (Sandbox Code Playgroud)
然后在像 reponse.status 这样的代码中访问状态。虽然,这是一种黑客行为,但对我有用。我还必须在缩小版本中进行更改。
归档时间: |
|
查看次数: |
66054 次 |
最近记录: |