IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AngularJS Discussion :

$http.get bogue-t-il ?


Sujet :

AngularJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Par défaut $http.get bogue-t-il ?
    Bonjour,

    Je veux tester l’état d’un core SOLR, grâce au suffixe admin/ping placé dans l’URL (à la fin donc). J’utilise AngularJS 1.4.7.

    J’ai le code suivant (ici ma dernière tentative d’obtenir un résultat, après en avoir essayé plusieurs autres) :
    Code AngularJS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    (function() {
    	'use strict';
    	angular
    		.module('app')
    		.factory('pingFactory', pingFactory)
    		.controller('pingController', pingController);
     
     
                    //injection des dépendances
    		pingController.$inject = ['pingFactory'];
    		pingFactory.$inject = ['$http'];
     
                    //fabrique
    		function pingFactory ($http) {
    			var service = {
    				offersPing: offersPing,
    			};
     
    			return service;
     
                            //fonction se connectant à l’adresse de ping du core
    			function offersPing () {
    				return $http.get('http://10.10.10.93:8080/solr/offers/admin/ping?wt=json');
    			}
     
    		}
     
                    //contrôleur
    		function pingController (pingFactory) {
     
    			var vm = this;
     
    			pingFactory.offersPing().success(function (status) {
    				vm.status = status;
    			});
     
    		}
     
    })();

    Je veux l’afficher avec un simple

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <div class="test" ng-controller="pingController as pC">{{ pC.status }} </div>

    Néanmoins, rien n’apparaît (pas de « {{ pC.status }} » tel quel, c’est déjà ça), et si j’active FireBug, j’obtiens :

    et
    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://10.10.10.93:8080/solr/offers/admin/ping?wt=json. Raison : l'en-tête CORS « Access-Control-Allow-Origin » est manquant.
    Est ce que cela signifie que je ne peux pas récupérer le statut de la requête HTTP, ou aucun rapport ? Sinon, savez-vous comment récupérer cette valeur ?

  2. #2
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Citation Envoyé par Hippocrène Voir le message
    Code AngularJS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	angular
    		.module('app')
    		.factory('pingFactory', pingFactory)
    		.controller('pingController', pingController);
     
     
                    //injection des dépendances
    		pingController.$inject = ['pingFactory'];
    		pingFactory.$inject = ['$http'];
    Quelle horreur ... Un composant Angular = un fichier de code source.

    Split moi tout ça stp.

    Sinon pour ton problème il faut te renseigner sur CORS comme sur ce thread.

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Par défaut
    Citation Envoyé par Marco46 Voir le message
    Un composant Angular = un fichier de code source.
    - Ok, c’est parti !

    Citation Envoyé par Marco46 Voir le message
    - C’est donc à CORS que je dois ce dysfonctionnement, et il n’y a pas moyen de passer outre cette spécification W3C.

    J’ai entendu parler de Restangular, je ne sais pas trop ce que ça vaut.
    Sinon, et puisque je n’ai besoin de récupérer uniquement le statut de la page, n’y a t il pas moyen d’utiliser une autre requête HTTP qui ne viendrait chercher que cette information (qui, je pense, est délivrée avec plus de facilités) ?

  4. #4
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Citation Envoyé par Hippocrène Voir le message
    - C’est donc à CORS que je dois ce dysfonctionnement, et il n’y a pas moyen de passer outre cette spécification W3C.
    Ce n'est pas vraiment un dysfonctionnement, c'est au contraire normal que tu obtiennes cette erreur.
    Oui il y a moyen en désactivant une option dans ton navigateur mais il ne faut pas le faire. Cela signifierait qu'il faudrait faire de même en production sur chacun des navigateurs qui devront se connecter à ton appli.

    Citation Envoyé par Hippocrène Voir le message
    J’ai entendu parler de Restangular, je ne sais pas trop ce que ça vaut.
    Sinon, et puisque je n’ai besoin de récupérer uniquement le statut de la page, n’y a t il pas moyen d’utiliser une autre requête HTTP qui ne viendrait chercher que cette information (qui, je pense, est délivrée avec plus de facilités) ?
    Le problème n'est pas sur le client mais sur le serveur. Il te faut lire cette doc.

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Par défaut
    J’ai vu ici qu’on pouvait résoudre le problème. J’ai donc ajouté (puis placé dans la dépendance de la fabrique et du contrôleur :

    Code AngularJS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    (function() {
    	'use strict';
    	angular
    		.module('app')
    		.config('pingConfig', pingConfig);
     
    		pingConfig.$inject = ['$httpProvider'];
     
    		function pingConfig ($httpProvider) {
    			delete $httpProvider.defaults.headers.common['X-Requested-With'];
    		}
     
    })();

    Mais il semble que $httpProvider n’est pas reconnu et fait tout planter.

    PS : je tiens à essayer de faire fonctionner le truc, parce que j’avais un problème similaire il y a quelques mois et je crois l’avoir résolu sans rajouter d’en-tête.

  6. #6
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Citation Envoyé par Hippocrène Voir le message
    J’ai vu ici qu’on pouvait résoudre le problème. J’ai donc ajouté (puis placé dans la dépendance de la fabrique et du contrôleur :
    La partie sur l'explication de ce qu'est ou n'est pas une requête CORS est bonne mais la partie sur le header c'est un peu n'imp

    Citation Envoyé par Hippocrène Voir le message
    Mais il semble que $httpProvider n’est pas reconnu et fait tout planter.
    C'est normal, la gestion des provider se fait dans la partie config des modules. Angular interdit de configurer un provider durant le runtime de la wepapp.

    Citation Envoyé par Hippocrène Voir le message
    PS : je tiens à essayer de faire fonctionner le truc, parce que j’avais un problème similaire il y a quelques mois et je crois l’avoir résolu sans rajouter d’en-tête.
    Commence par comprendre le problème.

    C'est une mécanisme de sécurité qui est implémenté dans ton navigateur. La webapp que tu développes n'a aucun pouvoir sur ça. Tu ne peux rien faire avec du code côté client pour résoudre ça.

    Le problème est sur le serveur. Il faut que ton serveur ajoute certains headers sur les requêtes à destination de ta webapp.

    Lis la doc que je t'ai linké (en français en +) !!

Discussions similaires

  1. fournir un user/mdp dans une requete https get
    Par buzuck dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 19/11/2007, 15h54
  2. envoyer une HTTP GET sans cURL
    Par Eusebius dans le forum Langage
    Réponses: 2
    Dernier message: 18/03/2007, 20h28
  3. Faire un HTTP GET en c++
    Par vivoli12 dans le forum C++
    Réponses: 2
    Dernier message: 24/08/2006, 13h00
  4. Un http get avec le shell...
    Par kitov dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 11/02/2006, 12h34
  5. Parser une requête HTTP/GET en c ! regex ?
    Par canard75 dans le forum C
    Réponses: 14
    Dernier message: 06/12/2005, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo