Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur "Cross-Origin Request"

21 octobre 2015 à 9:24:18

Bonjour tout le monde ! J'ai un petit soucis lors de l'intégration d'un .json dans un script javascript.

Pour situer le context je me forme en AngularJS et en Javascript, je suis pas très bon alors c'est peut-être 3x rien ...

Tout d'abord, voici l'erreur en question :"Blocage d'une requête multi-origines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://localhost:8000/Serveur/sample.json. Raison : l'en-tête CORS « Access-Control-Allow-Origin » est manquant."

Puis, voici le code de mon .js qui appele le .json :

'use strict';

angular
  .module("MyDataService")
  .service("DataService", httpCtrl);

  function httpCtrl($http) {
    this.getData = function(callback) {
      $http({
        method: 'GET',
        url: 'http://localhost:8000/Serveur/sample.json',
        headers: { 'Content-type': 'application/json' }
      })
        .success(function(data){ callback(data); })
        .error(function(){ callback(undefined); });
    };
  };

Si j'entre : http://localhost:8000/Serveur/sample.json

 dans mon navigateur, il me conduit bien au .json, donc le chemin est correct. J'ai pas mal recherché mais je n'ai pas trouvé la solution ... Si vous pouvez m'aider ce serait super, merci !

-
Edité par vincesylver 21 octobre 2015 à 9:24:59

  • Partager sur Facebook
  • Partager sur Twitter
21 octobre 2015 à 12:51:25

En fait ton erreur n'est pas un problème de "code" mais de comportement navigateur. Depuis quelques temps la politique est qu'on ne peux pas faire de requête cross domain, c'est à dire qu'on ne peut pas lancer une page www.monsite.fr ,et faire un ajax qui appelle un page sur www.monautresite.fr.

Les requête ajax doivent être sur des pages du même domaine (pour des raisons de sécurité)

  • Partager sur Facebook
  • Partager sur Twitter
21 octobre 2015 à 12:53:25

Salut, tu as cette erreur car tu fais une requête ajax depuis un autre domaine (adresse) hors il est impossible de faire une requête ajax sur une autre adresse que le site en cours. Pour se faire il te faut activer les CORS lors de la réponse du serveur.

Voici quelques informations https://developer.mozilla.org/fr/docs/HTTP/Access_control_CORS

  • Partager sur Facebook
  • Partager sur Twitter
22 octobre 2015 à 9:02:48

Tu es sûr ? Car je fais une requête sur le localhost pourtant
  • Partager sur Facebook
  • Partager sur Twitter
22 octobre 2015 à 9:56:03

Tu fais la requête à partir de quel domaine ?

Oui certain. Si les domaines ne correspondent pas il y a une erreur sauf si tu l'as expressément autorisé. Si tu fais du GET il y a aussi le JSONP qui n'a pas besoins du CORS.

  • Partager sur Facebook
  • Partager sur Twitter
22 octobre 2015 à 10:01:17

J'ai juste installé un serveur npm dans la racine de mon projet (angular-seed avec un git clone) et je lance mon .html depuis le PC de l'entreprise, je suis sur le domaine de l'entreprise

-
Edité par vincesylver 22 octobre 2015 à 10:35:39

  • Partager sur Facebook
  • Partager sur Twitter
22 octobre 2015 à 10:27:02

J'ai installé cors-anywhere, et même avec le demo.html de ce package je ne peux pas exectuer de méthode get vers mon .json , j'ai cette erreur "Not found because of proxy error: Error: connect ECONNREFUSED"

-
Edité par vincesylver 22 octobre 2015 à 10:31:50

  • Partager sur Facebook
  • Partager sur Twitter
22 octobre 2015 à 12:05:37

Npm n'est pas un serveur ;) c'est un gestionnaire de paquets.

Si tu lances un fichier html directement sans passer par un serveur, c'est normal c'est pas la même adresse !

Comment est ton architecture ? comment sers-tu les pages html de ton site ?

  • Partager sur Facebook
  • Partager sur Twitter
22 octobre 2015 à 14:19:18

Il faudrait que j'installe un serveur Apache par ex ? J'ai créer un dossier js pour mes .js, un dossier lib pour ajouter angular, et un dossier pour mes controllers. les .html sont à la racine , et j'ai installé le npm également à la racine.
  • Partager sur Facebook
  • Partager sur Twitter
22 octobre 2015 à 14:22:21

Pourtant la console m'indique bien qu'un serveur http est lancé sur le port 8000 quand j'execute npm start.

Je ne peux pas accéder à mon .json directement depuis le navigateur quand celui-ci n'est pas lancé.

-
Edité par vincesylver 22 octobre 2015 à 14:22:57

  • Partager sur Facebook
  • Partager sur Twitter
22 octobre 2015 à 15:49:08

Tu accèdes à partir de quelle adresse à ton site ? a partir de localhost:8000 ?
  • Partager sur Facebook
  • Partager sur Twitter
28 octobre 2015 à 11:11:16

Donc ta page où exécuté ton script est bien localhost:8000 tout comme l'adresse du json ?

Quel est ton navigateur ? Chrome je suppose ?

  • Partager sur Facebook
  • Partager sur Twitter
28 octobre 2015 à 11:35:05

Tente d'y accéder depuis 127.0.0.1 (en gros replace les localhost par 127.0.0.1)
  • Partager sur Facebook
  • Partager sur Twitter
28 octobre 2015 à 11:47:15

L'erreur de cross-domain ou bien Not found because of proxy error: Error: connect ECONNREFUSED ?
  • Partager sur Facebook
  • Partager sur Twitter
28 octobre 2015 à 12:06:48

Rajoute une entrée dans le fichier hosts (my.app) qui pointe suru 127.0.0.1. puis replace tour les localhost par my.app et accède au site à partir de my.app

Quelle est l'adresse de la page où le script js est exécuté ?

-
Edité par galileo 28 octobre 2015 à 12:07:23

  • Partager sur Facebook
  • Partager sur Twitter