我有一个基本的 AngularJS 服务设置,如下所示:
app.factory('User', function($resource) {
return $resource('http://api.mysite.com/user/:action:id/:attr', {}, {
history: {
method: 'GET',
params: {
attr: 'history'
}
},
update: {
method: 'POST',
params: {
name: 'test'
}
}
});
});
我像这样使用它:
User.history({id: 'testID'}, function(data) {
console.log('got history');
console.log(data);
});
User.update({id: 'me'}, function(data) {
console.log('updated');
console.log(data);
});
问题一: User.update() 尽管将方法设置为 POST,但仍将 OPTIONS 作为请求方法发送。
尽管 Chrome 开发工具报告请求标头 Access-Control-Request-Method:POST 也已发送(不确定这是否意味着什么)。
问题二:尽管在 API 代码中设置了这些标头,但我仍然收到 CORS 错误:
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
这个问题只有在发出非 GET 请求时才会出现。
处理这个问题的正确方法是什么?我也研究过 JSONP,但这是一个 RESTful api,我不确定如何仅通过 GET 支持来解决问题。