用301个位置报头处理在跨域一个REST响应(Dealing with a 301 and loca

2019-10-20 11:05发布

我使用Angularjs的Chrome 35.0和Firefox 30.0。

我需要休息请求的API。

其中有200201404(...)为响应每一个请求没有很好地工作。

一些具有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所以这是不可能处理的响应,如果我不能让bewteen 301和任何区别0响应...

Answer 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);


文章来源: Dealing with a 301 and location headers for a REST response in cross-domain