Javascript 获取前重新启动发送选项方法
我使用的API只接受GET方法并限制选项的使用。当我在chrome中发送请求时(通过Javascript 获取前重新启动发送选项方法,javascript,angularjs,http,get,restangular,Javascript,Angularjs,Http,Get,Restangular,我使用的API只接受GET方法并限制选项的使用。当我在chrome中发送请求时(通过--禁用web安全性,绕过cors),它会在GET方法之前发送OPTIONS方法,阻止获取资源 但是,在Safari中,我可以获取资源,因为它只发送GET。我通过ionic框架在移动设备上进行测试,但我无法获得资源,我假设是选项导致了这一点。我已经尝试创建一个自定义请求,虽然,文档会有所帮助,但我一直没有任何运气。这就是我的代码的样子,我刚刚开始使用Restanglar,但仍在摸索,非常感谢您的帮助/提示。谢谢
--禁用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问了另一个问题,我不确定是否为您回答了这个问题。您是否在询问如何克服被拒绝的飞行前选择请求?考虑修改问题题目,如果我的答案是正确的,请接受。我来看看你的另一个问题,试着帮你。