Работа с 301 и заголовками местоположения для ответа REST в междоменной области
Я использую Angularjs Chrome 35.0 и Firefox 30.0.
Мне нужно сделать Rest запросы к API.
Каждый запрос, имеющий 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 ответом...
1 ответ
Я сделал перехватчик и проверил наличие определенного заголовка, который должен происходить только в этом случае. Это не совсем правильно, но я думаю, что это лучшее решение...
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);