我正在使用Angularjs Chrome 35.0和Firefox 30.0。
我需要向API发出Rest请求。
每个响应为200,201,404(...)的请求都可以正常工作。
其中一些响应带有301和位置标头。
我的JavaScript
this.folder = function(folder) {
var url = config.domain + '/' + folder.key;
var methods = resource(url, null, {
'move': {
method: 'PUT',
params: {
'move': ''
},
headers: {
'copy-source': '/path/to/' + folderKey
},
url: config.domain + '/path/to/' + newKey
}
});
并在通话(有效)之后,在控制台中显示了此错误:
XMLHttpRequest无法加载http://domain.com/path/to/folder?move=。该请求已重定向到“ http://domain.com/path/to/folder”,这对于需要预检的跨域请求是不允许的。
编辑
而且我的错误状态为0,而不是301。因此,如果我不能在301和0响应之间做任何区别,就无法处理响应。
最佳答案
我确实做了一个拦截器并检查了仅在这种情况下才应该出现的特定标头。
这不是很恰当,但是我认为这是最好的解决方案。
var interceptor = ['$rootScope', '$q',
function(scope, $q) {
var success = function(response) {
return response;
}
var error = function(response) {
if (response.status === 0) { // server not responding
if (angular.isDefined(response.config.params['move'])) {
response.status = 301;
response.genericMessage = 'Folder correctly moved';
} else {
response.genericMessage = 'Server Connection refused, is it on ?';
window.location = '/#/login';
}
}
return $q.reject(response);
}
return function(promise) {
return promise.then(success, error);
}
}
];
$httpProvider.responseInterceptors.push(interceptor);
关于javascript - 处理跨域的REST响应的301和位置 header ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24760792/