У меня есть базовая настройка 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 Dev сообщают о заголовке запроса Access-Control-Request-Method: отправляется 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-токеном. Используемый код здесь для обработки всех необходимых заголовков: 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