Работа с 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);
Другие вопросы по тегам