Je tente de poster un document JSON d'une application Angularjs à un service de repos en maillot. La demande échoue, m'informant que:
J'ai activé (ce que je crois être) les en-têtes appropriés: xmlhttprequest ne peut pas charger http: // localhost: 8080 / my.Rest.Service / API / Commander / AddDon. Aucune en-tête «Access-Control-Control-Autory-Origin» est présente sur la ressource demandée. Origine 'http: // localhost' n'est donc pas autorisé à accéder. Code> p>
la fonction de post de jersey h2>
Access-Control-Autory-Origine Code> et
Access-Control-Abed-Abed-Méthodes Code> sur la réponse, comme indiqué dans la méthode ci-dessous: P>
myApp.controller('orderListCtrl', function ($scope, $http){
$http.get('http://localhost:8080/my.rest.service/api/order/listall').success(function(data) {
for (var i = 0; i < data.length; i++) {
if (data[i].description.length > 200) {
data[i].shortDesc = data[i].description.substring(0,196) + "...";
} else {
data[i].shortDesc = data[i].description;
}
};
$scope.orders = data;
});
});
4 Réponses :
J'avais fait face à une erreur de Cors similaire tout en appelant mon service reposant (mis en œuvre dans Java - Jersey) de Angularjs. Pour résoudre ce problème, j'ai ajouté response.addHeader("Access-Control-Allow-Origin", "*");
Que proposez-vous que l'objet de réponse est dans votre code ci-dessus? Et cela est-il fonctionnellement différent d'inclure le même en-tête de réponse dans le constructeur de réponses?
Cela a fonctionné pour moi lorsque j'ai ajouté uniquement "l'accès-contrôle-contrôle-origine", "*" Dans la réponse du site Web de repos. Je peux voir que vous l'avez déjà défini en réponse. S'il vous plaît essayez d'exécuter votre code sur la même adresse IP et le même port, vous savez donc bien qu'il n'y a pas de problème dans le code angulaire.
Le problème s'est avéré être une manipulation inadéquate de la demande d'options envoyée en pré-vol avant la demande de poste avec les en-têtes d'origine croisée appropriés. p>
J'ai pu résoudre le problème en téléchargeant et en implémentant le filtre Cors trouvé sur cette page: http: // logiciel.dzhuvinov.com/cors-filter-installation.html . p>
Si vous rencontrez un problème similaire, suivez les instructions et le test pour voir que votre demande d'options n'est plus défaillante et est immédiatement suivie de votre demande réussie. P>
Le meilleur moyen est d'ajouter un filtre de réponse en maillot qui ajoutera les en-têtes Cors pour toutes les méthodes. Vous n'avez pas besoin de changer votre implémentation de service Web.
Je vais expliquer pour Jersey 2.x P>
1) Ajoutez d'abord un répondeur de réponse comme indiqué ci-dessous P>
<init-param> <param-name>jersey.config.server.provider.classnames</param-name> <param-value>YOUR PACKAGE.CorsResponseFilter</param-value> </init-param>
En réalité, vous avez une autre solution qui n'a pas besoin d'un filtre. Ajout du voir https://kdecherf.com/blog/2011/06/19/java-jersey-a-cors-commant-Rest-api/ pour référence . p> p> Access-Control-Autoriser - * Code> Les en-têtes de la requête CODE> Get CODE> ne sont pas suffisants, vous devez créer une option
Options CODE> OPTION pour autoriser les navigateurs Faites la demande de pré-vol, c'est-à-dire: