Javascript 获取前重新启动发送选项方法

Javascript 获取前重新启动发送选项方法,javascript,angularjs,http,get,restangular,Javascript,Angularjs,Http,Get,Restangular,我使用的API只接受GET方法并限制选项的使用。当我在chrome中发送请求时(通过--禁用web安全性,绕过cors),它会在GET方法之前发送OPTIONS方法,阻止获取资源 但是,在Safari中,我可以获取资源,因为它只发送GET。我通过ionic框架在移动设备上进行测试,但我无法获得资源,我假设是选项导致了这一点。我已经尝试创建一个自定义请求,虽然,文档会有所帮助,但我一直没有任何运气。这就是我的代码的样子,我刚刚开始使用Restanglar,但仍在摸索,非常感谢您的帮助/提示。谢谢

我使用的API只接受GET方法并限制选项的使用。当我在chrome中发送请求时(通过
--禁用web安全性,绕过cors),它会在GET方法之前发送OPTIONS方法,阻止获取资源

但是,在Safari中,我可以获取资源,因为它只发送GET。我通过ionic框架在移动设备上进行测试,但我无法获得资源,我假设是选项导致了这一点。我已经尝试创建一个自定义请求,虽然,文档会有所帮助,但我一直没有任何运气。这就是我的代码的样子,我刚刚开始使用Restanglar,但仍在摸索,非常感谢您的帮助/提示。谢谢

      .constant('baseURL', {
          url: 'https://api.example.com'
      })

      .config([
  'RestangularProvider', 'baseURL',
  function(RestangularProvider, baseURL) {

    RestangularProvider.setBaseUrl(baseURL.url);


    RestangularProvider.setDefaultHeaders({
      Authorization: 'Basic ' + baseURL.jwt
    })

  }
])


      .controller('MainCtrl', ['$scope', 'Restangular',
          function($scope, Restangular) {

              Restangular.one('destinations').get('').then(function(destinations) {

      $scope.destinationBase = destinations;

    });

您可以尝试拦截响应,如果方法是
OPTIONS
,并且请求是针对有问题的URL,请将响应代码修改为
200
204

这里只是一个偏好问题,但我不想使用,而是想向数组中添加一个函数。Restangular在后台使用
$http
,那么为什么不跳过中间人直接进入源代码呢

像这样的方法应该会奏效:

angular.module('myApp', ['restangular'])
    .config(httpConfig);

function httpConfig($httpProvider) {
    $httpProvider.interceptors.unshift(interceptor);

    function interceptor() {
        return {
            response: responseInterceptor
        };

        function responseInterceptor(response) {
            if (response.config.url === 'http://my.api.com/endpoint' && response.config.method === 'OPTIONS' && response.status > 299) {
                response.status = 204;
                response.statusText = 'No Content';
            }

            return response;
        }
    }
}

描述了
response
对象,并描述了
response.config

您可以尝试拦截响应,如果方法是
OPTIONS
,并且请求是针对相关URL的,请将响应代码修改为
200
204

这里只是一个偏好问题,但我不想使用,而是想向数组中添加一个函数。Restangular在后台使用
$http
,那么为什么不跳过中间人直接进入源代码呢

像这样的方法应该会奏效:

angular.module('myApp', ['restangular'])
    .config(httpConfig);

function httpConfig($httpProvider) {
    $httpProvider.interceptors.unshift(interceptor);

    function interceptor() {
        return {
            response: responseInterceptor
        };

        function responseInterceptor(response) {
            if (response.config.url === 'http://my.api.com/endpoint' && response.config.method === 'OPTIONS' && response.status > 299) {
                response.status = 204;
                response.statusText = 'No Content';
            }

            return response;
        }
    }
}

描述了
response
对象,描述了
response.config

我明白了,我从来没有处理过飞行前的问题,这就是问题所在。我刚刚打开了我的浏览器,设置为禁用cors。我想起来了,我从来没有处理过飞行前的问题,这就是问题所在。我刚打开浏览器设置为禁用cors

谢谢,但我在客户端工作,无法访问服务器端$http是一个角度服务,我给你的代码截取了客户端的响应。我只是注意到,我要看看这能做什么,我知道我能做到!似乎添加“RestangularProvider.setDefaultHeaders”会导致它在GET之前吐出选项,所以我在这里@qizzacious问了另一个问题,我不确定是否为您回答了这个问题。您是否在询问如何克服被拒绝的飞行前选择请求?考虑修改问题题目,如果我的答案是正确的,请接受。我会看看你的另一个问题并尝试帮助你。谢谢,但我在客户端工作,无法访问服务器端$http是一个角度服务,我给你的代码截取了客户端的响应。我只是注意到,我要看看这能做什么,我知道我能做到!似乎添加“RestangularProvider.setDefaultHeaders”会导致它在GET之前吐出选项,所以我在这里@qizzacious问了另一个问题,我不确定是否为您回答了这个问题。您是否在询问如何克服被拒绝的飞行前选择请求?考虑修改问题题目,如果我的答案是正确的,请接受。我来看看你的另一个问题,试着帮你。