ho una base di installazione del servizio AngularJS in questo modo:AngularJS: inviare dati a REST API esterno
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'
}
}
});
});
e lo uso come questo:
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);
});
Problema uno: User.update(), nonostante abbia il metodo impostato su POST, continua a inviare OPZIONI come metodo di richiesta.
Sebbene gli strumenti di Chrome Dev riportino l'intestazione della richiesta Access-Control-Request-Method: anche POST viene inviato (non è sicuro se ciò significa qualcosa).
Problema due: Continuo a ricevere un errore con CORS, pur avendo queste intestazioni fissati nel codice API:
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
Questo problema mostra solo se se fare una richiesta non-GET.
Qual è il modo corretto di gestirlo? Ho anche esaminato JSONP, ma essendo questa una API RESTful, non sono sicuro di come aggirare i problemi con il solo supporto GET.
Il browser che inviava la richiesta OPZIONI quindi la richiesta POST era dove il mio problema era. Il server non è stato configurato per rispondere alle OPZIONI iniziali. Non ho avuto bisogno di fare nulla con x-xsrf-token però. Utilizzato il codice da qui per gestire tutte le intestazioni necessarie: http://stackoverflow.com/questions/13293157/backbone-slim-php-access-control-allow-headers-can-get-information-cant/13530329#13530329 –
questo era esattamente il mio problema grazie. Se usi node/express, segui le istruzioni "abilita pre-volo" qui per ottenere il funzionamento di cors: https://github.com/troygoode/node-cors/ – JasonS