我有一个基本的AngularJS服务设置像这样:AngularJS:POST数据到外部REST API
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开发工具会报告请求标题访问控制请求方法:也发送POST(不知道这是否意味着什么)。
问题二:我不断收到一个错误与CORS,尽管有这些头的API代码设置:
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
此问题仅虽然显示出来,如果做一个非GET请求。
处理这个问题的正确方法是什么?我也研究过JSONP,但是由于这是一个RESTful API,我不确定如何解决只有GET支持的问题。
发送OPTIONS请求和POST请求的浏览器是我的问题所在。服务器未设置为响应初始选项。尽管我不需要对x-xsrf-token做任何事情。使用这里的代码来处理所有必要的标题:http://stackoverflow.com/questions/13293157/backbone-slim-php-access-control-allow-headers-can-get-information-cant/13530329#13530329 –
这正是我的问题。谢谢。如果您使用node/express,请按照下面的“启用预先飞行”说明获取cors工作:https://github.com/troygoode/node-cors/ – JasonS