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

JavaScript Discussion :

Appel d'un serveur pour requete json avec adresse IP locale ou publique


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur avant-vente
    Inscrit en
    Janvier 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur avant-vente
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2017
    Messages : 26
    Par défaut Appel d'un serveur pour requete json avec adresse IP locale ou publique
    Bonjour,

    Je fais appel à vous car je suis (très) débutant en JavaScript et j'essaie d'adapter le code d'une page mais je suis confronté à un problème d'adresse IP ou d'URL.

    Ma page contient une fonction JavaScript qui va faire une requête json sur une URL pour récupérer une valeur.
    Derrière cette URL j'ai mon serveur domotique.
    Quand je suis sur mon PC connecté à réseau local sur lequel se trouve le serveur, l'adresse IP du serveur est en 192.168.1.xx.
    Par contre, quand je suis sur mon téléphone, donc sur internet, l'adresse IP du serveur est l'adresse IP publique de ma box ou alors mon nom de domaine. Par exemple www.monserveur.fr

    Hors dans le code que je dois adapter, je dois rentrer une seule adresse pour le serveur.

    En voici l'extrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $.LastUpdateTime=parseInt(0);
    $.roomplan=21;
    $.domoticzurl="http://192.168.0.41:8080";
     
    function RefreshData()
    {
    	clearInterval($.refreshTimer);
    	var jurl=$.domoticzurl+"/json.htm?type=devices&plan="+$.roomplan+"&lastupdate="+$.LastUpdateTime+"&jsoncallback=?";
    	$.getJSON(jurl,
    	{
    		format: "json"
    	},
    La variable domoticzurl doit être adaptée mais comment ?
    Pouvez vous m'aider et me dire comment on gère ce type de problème en JavaScript ?
    Il faut que mon code fonctionne sur tous les navigateurs, que je sois connecté sur mon réseau local ou alors sur Internet.

    D'avance un grand merci à vous.
    Alex

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    Pour dynamisé l'IP ou le domain ll te faut l'utiliser le nom de domain de façon dynamique en Js sans http(s) devant afin qu'il accepte les deux protocoles, et qu'il récupère le domain appelé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $.LastUpdateTime=parseInt(0);
    $.roomplan=21;
    $.domoticzurl="//" + document.domain + ":8080";
     
    function RefreshData()
    {
        clearInterval($.refreshTimer);
        var jurl=$.domoticzurl+"/json.htm?type=devices&plan="+$.roomplan+"&lastupdate="+$.LastUpdateTime+"&jsoncallback=?";
        $.getJSON(jurl,
        {
            format: "json"
        },

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur avant-vente
    Inscrit en
    Janvier 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur avant-vente
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2017
    Messages : 26
    Par défaut
    Merci pour ta réponse !
    Ca marche mais évidement comme toujours chez moi il y a un mais !
    Le soucis c'est que le port n'est pas le même quand je suis sur le réseau local ou quand j'accède depuis internet.
    Sur le réseau local le port du serveur domotique est bien 8080. Par contre, quand je viens d'internet, je dois accéder à la box par le port 8888.
    Y a t'il un moyen de régler ce "dernier" problème ?

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    Code javascript : 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
       $(document).ready(function() {
         $.LastUpdateTime = parseInt(0);
         $.roomplan = 21;
         $.domoticzurl = "//" + document.domain + ":8080";
         $.ajax({
             type: "POST",
             url: $.domoticzurl,
             datatype: "xml",
             error: function(jqXHR, textStatus, errorThrown) {
               if (jqXHR.status == 404) { //si l'url appelé retourne une erreur 404 on réaffecte notre URL en passant le nouveau PORT 
                 $.domoticzurl = "//" + document.domain + ":8888";
               }
             },
             success: //don't do anything. just visit the page 
           )
         };
     
         function RefreshData() {
           clearInterval($.refreshTimer);
           var jurl = $.domoticzurl + "/json.htm?type=devices&plan=" + $.roomplan + "&lastupdate=" + $.LastUpdateTime + "&jsoncallback=?";
           $.getJSON(jurl, {
               format: "json"
             },
           });
       });
    L'idée et là : un appel ajax en amont afin de savoir l'existance de l'url appelé par défaut en utilisant le port 8080, si il y a une erreur 404 non existance de la page en question alors on réaffecte notre URL avec le bon port 8888.
    J'ai pas testé ...

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur avant-vente
    Inscrit en
    Janvier 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur avant-vente
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2017
    Messages : 26
    Par défaut
    Franchement merci car même si je connais un peu la programmation je ne connais rien à Javascript.
    Dis moi si j'abuse mais j'ai encore une question.
    Que retourne document.domain comme valeur ?
    Si je suis sur mon résau local, je vais appeler le serveur domotique en faisant : 192.168.1.150:8080.
    Si je suis sur internet je vais accéder à mon serveur via un dyndns (par exemple toto.dyndsn.me:8888).
    Si la chaine document.domain contient l'adresse IP et que cette adresse IP commence par 192.168.x.y c'est que forcément je suis en local. Car les adresses qui commencent pas 192.168 sont des adresses locales.
    Est-ce que je ne pourrais pas faire un test sur cette valeur ? Et par exemple dire :
    Si (document.domain commence par 192.168 ou http://192.168) alors port=8080 sinon port=8888

    Et si mon raisonnement est bon comment je peux faire ce test en JS ?

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par campeaux Voir le message
    Que retourne document.domain comme valeur ?
    La valeur document.domain retourne le domaine seulement soit sans le http(s)://mondomain.com ou mon ip 192.168.1.150 sans son port qui faut rentrer à la main. //ici on test si document.domain est égal a ton IP locale 192.168.1.150 on concatène le port :8080 sinon on concatène le domaine avec le port :8888 ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     $.LastUpdateTime = parseInt(0);
     $.roomplan = 21;
     $.tmp_domain = (document.domain === '192.168.1.150') ? document.domain + ":8080" : document.domain + ":8888"
     $.domoticzurl = "//" + $.tmp_domain;
     
     function RefreshData() {
       clearInterval($.refreshTimer);
       var jurl = $.domoticzurl + "/json.htm?type=devices&plan=" + $.roomplan + "&lastupdate=" + $.LastUpdateTime + "&jsoncallback=?";
       $.getJSON(jurl, {
             format: "json"
           },

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Main loop coté serveur pour un jeu avec NodeJS?
    Par Argorate dans le forum NodeJS
    Réponses: 13
    Dernier message: 31/12/2015, 01h31
  2. Configuration exim4 pour site internet avec mail en local en plus ?
    Par Invité dans le forum Administration système
    Réponses: 1
    Dernier message: 02/02/2015, 20h48
  3. Comment executer une requete json avec java?
    Par stpaul04 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 03/08/2014, 04h27
  4. [JSTL] Ecart local/serveur pour affichage de \" avec c:set et c:out
    Par cbil1 dans le forum Taglibs
    Réponses: 0
    Dernier message: 05/01/2012, 11h03
  5. Erreur requete json avec jquery 1.5
    Par gtraxx dans le forum jQuery
    Réponses: 2
    Dernier message: 06/02/2011, 18h54

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