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

jQuery Discussion :

Http request et javascript


Sujet :

jQuery

  1. #1
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 96
    Points
    96
    Par défaut Http request et javascript
    Bonjour,

    J'ai un petit souci que je ne maîtrise pas bien concernant l'appel d'une page php (via httpRequest) contenant une fonction javascript.

    J'ai une page php contenant une fonction javascript permettant d'afficher un graph via HightChart (librairie javascript permettant de faire des graphs). En appelant cette page seule, j'affiche bien mon graph qui est lancé via une fonction javascript :

    Code : 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    <script src="../ClassFonctionJS/js/jQuery.js"></script>
    <script type="text/javascript">
     
     
    $(document).ready( function(){
        alert ('oi');
        groupBar();
    });
     
    function groupBar() {
    alert('oui');
                $('#bar_liaison').highcharts({
                    chart: {
                        type: 'column',
                        height : 400,
                        width: 1000
                    },
                    title: {
                        text: 'Nombre de liaisons utilisées',
                        style: {
                            fontSize : '12px'
                        }
                    },
                    subtitle: {
                        text: 'Source: Valenciennes Métropole',
                        style: {
                                fontSize : '9px'
                            }
                    },
                    xAxis: {
                        categories: [<?php echo join($legend_bar,',') ?>],
                        title: {
                            text: null
                        },
                        labels: {
                            rotation: -20,
                            style: {
                                fontSize: '9px'
                            }
                        }
                    },
                    yAxis: [{
                        min: 0,
                        //max: 120,
                        labels: {
                            style: {
                                color: 'red'
                            }
                        },
                        title: {
                            text: 'Nombre total de liaison',
                            align: 'middle'
                        },
                        labels: {
                            overflow: 'justify'
                        },               
                        opposite: true
                    },
                    // second yAxis
                    {
                        min: 0,
                       // max: 80,
                        labels:{
                            style :{
                                color: 'red'
                            }
                        },
                        title: {
                            text: 'Nombre de liaison',
                            align: 'middle'
                        },
                        labels: {
                            overflow: 'justify'
                        }
                    }],
                    tooltip: {
                        pointFormat:  "{series.name} : {point.y:.0f} fois"
                        //valueSuffix: ' ha'
                    },
                    legend: {
                        layout: 'vertical',
                        align: 'left',
                        verticalAlign: 'top',
                        x: 60,
                        y: 35,
                        floating: true,
                        borderWidth: 1,
                        backgroundColor: '#FFFFFF',
                        shadow: true,
                        layout: 'horizontal', // permet de mettre la legende en horizontal
                        //width : 150, // en fixant une largeur on peut jouer sur le nombre de colonne à afficher
                        itemStyle: {
                            color: 'black',
                            fontSize: '9px'
                        }
                    },
     
                    plotOptions: {
                        series: {
                            animation: false,
                            marker: {
                                radius: 2,
                                fillColor : 'black'
                            }
                        },
                        spline: {
                                dataLabels: {
                                    enabled: true,
                                    crop : false, // permet de ne pas bloquer l'affichage d'un label si hot
                                    format: '{point.y:.0f}',
                                    style: {
                                            fontSize: '12px' 
                                        }
                                }
                        }
                    },
                    series: [<?php echo $series_bar ?>,<?php echo $line_data?>]   
                });
            };
    </script>
    avec le page php suivante :

    ..../FO_Location/StatLiaison.php?id_Liaison=36

    Par contre si je veux ouvrir cette page via httpRequest , la page se charge (avec le contenu écrit en php) mais pas le graph car apparemment la fonction javascript n'est pas appelée. (j ai mis un alerte au moment f de l'appel mais rien ne se passe).

    Je pense que je ne dois pas très maitriser tout le mécanisme du httprequest :

    Voici mon code :

    Code : 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    function Select_StatLiaison(id)
    {
        var bal=document.createElement("div");
     
        url = Request_StatLiaison(id);
        Asynchrone(url,"divStatLiaison");
    }
     
    function Request_StatLiaison(id)
    {
         return ("http://..../fo_location/StatLiaison.php?id_Liaison="+escape(id)+"&nocache="+Math.random());
    }
     
    function Asynchrone(v_url,div)
    {
     
         if(window.XMLHttpRequest) // FIREFOX
         {      
            try
            {
                xhr = new XMLHttpRequest();
            }
     
            catch (e){
                try{
                    xhr = new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch (e){
                    try {
                        xhr = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e){
                        alert("XHR not created");
                    }          
                }
             } // end catch (e)
         }// end if
     
         else if(window.ActiveXObject) // IE
         {        
            xhr = new ActiveXObject("Microsoft.XMLHTTP");      
         }
     
         else
         {
              alert("Fonction non supportée par le navigateur");
              xhr = false;
     
            return(false);
         }
     
          xhr.open("POST", v_url, true);
          xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded; charset=iso-8859-1');
          //xhr.setRequestHeader('Cache-Control','no-cache');
     
          xhr.onreadystatechange = function() {
              //alert(xhr.readyState);
              //alert(v_url);
     
     
          if (xhr.readyState == 4){ 
     
     
          //if (xhr.status == 200) // 200 : requete réussie
              if (xhr.status != 404 && xhr.status != 500) // 200 : requete réussie // 0 : requete vide  !!
              {            
                var element = document.getElementById(div);
     
                try
                {            
                      //alert(xhr.responseText);                 
                  element.innerHTML = xhr.responseText;
                  return false;
     
                }
     
                catch(e)
                {
                    try
                    {        
                        var wrappingElement = document.createElement('div');
                        wrappingElement.innerHTML = xhr.responseText;
     
                        while (element.firstChild) {
                          element.removeChild(element.firstChild);
                        }
                        element.appendChild(wrappingElement);
     
                    } // end of catch
                    catch (e)
                    {
                        //alert('3');
                    } // end fo catch
                  } // end of catch
               }    // end if xhr.status == 200
     
               if (xhr.status == 404)
               {
                    html = 'Fichier non trouvé 404 : <br/>';
                    html += xhr.responseText;
               }
     
               if (xhr.status == 500)
               {
                    html = 'Erreur 500 serveur : <br/>';
                    html += xhr.responseText;
               }
     
               // on affiche le fragment HtML
                //$('contenu')innerHTML = html;
          } // end if xhr.readyState == 4
     
          else
          {
              return false;
          }    
      } // end of function
      xhr.send(null);   
    }
    (j'ai supprimé une partie de l'adresse url volontairement , mais l'adresse en bonne)

    Quand je fais appel à ma page php , la fonction javascript n'est donc pas appelée. Y a t-il un processus particulier ou un ajout de code supplementaire à mettre pour enclencher l'appel des fonctions javascript ? J'ai aussi essayé de mettre un OnLoad dans le body mais cela ne fonctionne pas non plus.

    En pièce jointe j'ai fait un imprime écran de la page appelée.

    Merci pour votre aide !
    Nom : location_fibre.jpg
Affichages : 205
Taille : 82,1 Ko

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Je te conseille fortement d'utiliser une librairie pour gérer tes xhr plutôt que de réinventer la roue. (EDIT : Tu importes jQuery à ce que je vois, utilises donc les fonctions xhr de jQuery)

    Tu ne peux pas appeler une page php via du javascript. Au mieux tu peux appeler un webservice (écrit en php ou pas) qui va te retourner des datas (json, xml, ...) sans changer de page.

    Pour que ce soit clair, le php est exécuté côté serveur et te retourne une page entière. Le javascript est exécuté côté client. A mon avis tu as un problème d'architecture avant d'avoir un problème de code.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 96
    Points
    96
    Par défaut
    Merci pour ta réponse. J'utilise jQuery (seulement) pour utiliser $(document).ready .

    J'utilise httpRequest depuis pas mal de temps (j'implémente à chaque fois le même code) et je ne me suis pas trop penché pour utiliser ajax via jQuery. Pour expliquer un peu mieux mon code, sur ma page mère j'ai un tableau où sur chaque ligne j'ai mis un évement onMouseover qui lance ma fonction javascript (avec en paramétre l'identifiant d'une liaison) contenant le httprequest utilisant la fonction hr.open("POST", v_url, true) , qui donc ouvre ma page php contenant le graph. Il me semblait donc bien au final que j'ouvrais une page php se trouvant effectivement sur le serveur ? J'ai mis en pièce le résultat final...Nom : location_fibre_2.jpg
Affichages : 192
Taille : 534,6 Ko
    Images attachées Images attachées  

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par mcdelay Voir le message
    ... J'utilise jQuery (seulement) pour utiliser $(document).ready . ...
    Autrement dit, tu achètes une voiture pour avoir le porte-clé....

    En jQuery, il existe des syntaxes très simple :
    • .ajax()
    • .post()
    • .load()
    • ...

    Il serait temps de t'y intéresser.

    Mets la clé dans le contact et en voiture Simone !

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Citation Envoyé par mcdelay Voir le message
    Il me semblait donc bien au final que j'ouvrais une page php se trouvant effectivement sur le serveur ?
    Mais tu l'ouvres où ? Ton php va s'exécuter sur le serveur et te retourner des données, reste à voir sous quelle forme et comment l'intégrer dans ta page courante.

    +1 avec jreaux62
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    Citation Envoyé par mcdelay
    ... J'utilise jQuery (seulement) pour utiliser $(document).ready . ...
    non pas que à preuve
    $('#bar_liaison').highcharts({

  7. #7
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    mcdelay, je vois pas mal de code de récupération dans ton script, à base de try/catch (parfois même des try imbriqués dans des catch), ainsi que de gestion d’erreurs de requête assez fragile à grand renfort de if/else. Tout ça me laisse penser que tu n’utilises pas les outils de développement de ton navigateur pour examiner les erreurs. Appuie sur F12.

    Deux outils vont t’aider principalement :
    l’onglet console qui affiche les erreurs de script et te permet d’utiliser console.log à la place de alert ;
    l’onglet réseau qui te permet d’examiner les requêtes, voir les codes retournés par le serveur, les en-têtes http, etc.

    Ces outils vont te permettre de supprimer beaucoup de lignes de code et te concentrer sur l’essentiel.

    Tu as également moyen de bien alléger ton code concernant ajax, à la fois la création de l’objet xhr et la gestion de la réponse du serveur. L’ActiveX ajax est obsolète depuis la mort d’IE6 (j’en veux pour preuve que IE7 supporte nativement l’objet XMLHttpRequest) ; et même onreadystatechange est quasiment déprécié aujourd’hui, car XMLHttpRequest a des méthodes onload, onprogress et onerror, plus pratiques, dont le support est assuré à 94 % au moment où j’écris ceci.

    Mais comme tu utilises jQuery, je me joins à jreaux62 et Marco46 pour te conseiller d’utiliser les méthodes ajax de jQuery.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. Les meilleurs livres pour apprendre le JavaScript
    Par vermine dans le forum Livres
    Réponses: 23
    Dernier message: 10/06/2019, 18h58
  2. JavaScript<---->ActionScript
    Par crazypiou dans le forum Flash
    Réponses: 21
    Dernier message: 17/04/2009, 17h14
  3. Construire chemin sur bouton avec évt Javascript
    Par Ph. B. dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/05/2003, 10h26
  4. appel xmlservice via fonction javascript
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 06/05/2003, 14h24
  5. JavaScript de vérification de formulaire
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/02/2003, 13h48

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