Ich habe einen grundlegenden AngularJS Service Setup wie so:AngularJS: POST-Daten an externen 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'
}
}
});
});
und ich verwende es wie folgt aus:
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);
});
Problem ein: User.update(), obwohl die Methode auf POST gesetzt ist, sendet weiterhin OPTIONS als Request-Methode.
Obwohl Chrome Dev-Tools den Request-Header Access-Control-Request-Methode meldet: POST wird auch gesendet (Nicht sicher, ob das irgendetwas bedeutet).
Problem zwei: Ich erhalte einen Fehler mit CORS trotz dieser Header in dem API-Code festgelegt hat:
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
Dieses Problem tritt nur wenn zeigt, wenn eine nicht-GET-Anfrage zu machen.
Wie ist der richtige Umgang damit? Ich habe auch JSONP untersucht, aber da es sich um eine REST-konforme API handelt, bin ich mir nicht sicher, wie ich die Probleme mit der GET-Unterstützung umgehen kann.
Der Browser, der die OPTIONS-Anfrage und dann die POST-Anfrage sendet, war mein Problem. Der Server wurde nicht eingerichtet, um auf die anfänglichen OPTIONEN zu reagieren. Ich musste jedoch nichts mit x-xsrf-token tun. Benutzte den Code von hier, um alle notwendigen Header zu behandeln: http://stackoverflow.com/questions/13293157/backbone-slim-php-access-control-allow-headers-can-get-information-cant/13530329#13530329 –
Das war genau mein Problem. Danke. Wenn du node/express benutzt, folge den "enable pre-flight" Anweisungen hier um cors arbeiten zu lassen: https://github.com/troygoodeNode-cors/ – JasonS