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

AJAX Discussion :

[AJAX] accéder à de l'ajax par url


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 20
    Par défaut [AJAX] accéder à de l'ajax par url
    Bonjour,

    J'ai suivi le tuto suivant :

    [Tuto][PHP,Javascript(AJAX)] Application AJAX accessible par

    Rendre ses pages atteignables par url tout en utilisant ajax ?

    C'est possible, et commander berze va vous l'expliquer:

    A quoi ça sert ?
    L'utilité pour un simple site est sans doute très limité. Mais pour une application web, c'est quasi essentiel. Regardez plutôt Yahoo Maps. Pendant que vous naviguez dans la carte, l'url change, en direct ! On y voit la latitude, la longitude, l'état du zoom.. Et quand on colle l'url dans une nouvelle page, ça marche ! On retrouve l'endroit ou vous étiez.

    Ce guide est une approche simplissime de la technique utilisée.

    Niveau:
    Il faut déjà avoir baigné dans de l'ajax.

    Langages:
    Javascript, PHP, Html.

    L'état des chôses:
    Ajax, comme expliqué dans la faq, rend les pages web dynamiques, permettant d'en modifier le contenu sans devoir recharger tout la page, rendant le tout plus vif, plus rapide. Sa popularité est grandissante car elle permet aux applications web d'agir quasi comme des applications locales (que vous exécutez sur votre ordinateur), permettant de faire le pont entre les deux, comme google docs ou zoho.

    Le problême:
    Il n'y a plus de lien direct vers la page. C'est pourtant la une des bases d'internet: avoir une adresse, un lien vers ce qu'affiche votre navigateur, que vous pouvez enregistrer, partager, retenir, copier, coller, etc..
    Autre souci, dont ne traite pas ce sujet, c'est que pendant qu'on navigue sur la page, plus rien n'est enregistré dans l'historique du navigateur.

    La solution;
    Modifier l'url, en utilisant javascript. Mais comment ? Comment modifier l'url sans rafraîcher la page ?
    En modifiant le hash, en y injectant des variables et des valeurs. Le hash ? C'est la partie de l'url ou on retrouve les ancres:

    monsite.be/index.php?q=wow#hash


    (pour plus d'infos sur le dom et les éléments de l'url)
    Pour ensuite charger la page, il suffit de récuperer le hash lors du chargement, en extraire les valeurs, et charger le contenu.

    Application:
    Deux pages:
    index.php (page d'accueil, ou se retrouvera toute la partie javacscript et html, en gros la dynamique et affichage)
    contenu.php (script qui envoie le contenu à index.php, lorsque celui-ci le demande, cf. ajax).

    Le code utilisé pour la connexion asynchrone (ajax) a directement été repris du tuto de Ryle.

    index.php:

    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
     
    <html><head><title>Ma Planche</title>
    <!-- partie javascript -->
    <script type="text/javascript">
     
    function charge_page(page) {             // la fonction qui charge la page.
     
       // Code pris du tutoriel Ajax.
       if (window.XMLHttpRequest) {                   //  On test si l'objet existe
         xhr = new XMLHttpRequest();                   //  Firefox, Safari, ...
       }
       else if (window.ActiveXObject) {                //  Version ActiveX
         xhr = new ActiveXObject("Microsoft.XMLHTTP");   // Internet Explorer
       }
     
       xhr.open('GET', './contenu.php?p='+page, true);
       xhr.send(null);
     
       xhr.onreadystatechange = function() {          // traitement  de la réponse
         if (xhr.readyState == 4) {                   // la réponse a bien été renvoyée
     
           if (xhr.status == 200)                   // on vérifie qu'il n'y a pas eu d'erreur
             document.getElementById('contenu').innerHTML = xhr.responseText; // met à jour le contenu d'un div par ex
           else                                  // si la page n'est pas trouvée (404), les droits sont insuffisants (501), ...
             alert ("Erreur : " + xhr.status);
         }
       }
       // fin du code du tuto.
     
       parent.location.hash = page;                  // Modification de l'url.
    }
     
     
    window.onload = function() {         // Ce qu'il y a à exécuter lors du chargement de la page (récuperer le hash).
       var hash = parent.location.hash;       // on mets le hash dans une variable
     
       if (hash != "") {                   // on verifie qu'il n'est pas vide et on agit en conséquence.
          charge_page(hash.substring(1));    // on évite de prendre en compte le croisillon, et on charge le contenu. Fini !
       } else {
          charge_page("accueil");            // la page d'accueil est chargée par défaut.
       }
    };
     
     
    </script>
     
    </head>
     
    <!-- le corps de la page, avec un titre, sous-titre et menu. -->
    <body>
    <center>
    <h2 style="display:inline;">Ma planche: </h2>
    <h3 style="display:inline;">J'ai une belle planche</h3><br>
    <a href="javascript:charge_page('accueil');">accueil</a>
    <a href="javascript:charge_page('materiau');">materiau</a>
    <a href="javascript:charge_page('outil');">outil</a>
     
    <p id="contenu">
    <!-- le paragraphe ou sera injecté le texte -->
    </p>
    </center>
    </body>
    </html>
    contenu.php :

    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
    <?php
     
    // le contenu de mon mini-mini-site:
     
    $contenu = array (
     
            "accueil"       => "Bienvenu sur mon site sur ma planche que dedans je fais des trous.",
     
            "materiau"      => "Ma planche est en bois bien dur.",
     
            "outil"         => "Et pour y faire des trous, j'utilise une foreuse");
     
     
     
    // je récupère la page demandée
     
    $page = $_GET["p"];
     
     
     
    // j'envoie le tout encodé en UTF8.
     
    echo utf8_encode($contenu[$page]);
     
    ?>
    Dans une remarque il est dit que on peut mettre des variables

    Ici il n'y a qu'une valeur. Mais rien n'empêche d'y injecter des variables: monsite.fr/index.php#p=accueil&q=planche&x=144, il faudra juste ajuster le code pour le permettre de récuperer ces valeurs.
    Mais je n'arrive pas à récupérer ces variables, faut-il utiliser autre chose que $_GET['p'] et $_GET['x'] dans ces cas là où il y a un dièse ?

  2. #2
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monsite.fr/index.php#p=accueil&q=planche&x=144
    ???

    Ce ne serait pas plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monsite.fr/index.php?p=accueil&q=planche&x=144
    ?

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 185
    Par défaut
    Non le # permet de ne pas changer de page et ainsi de faire intervenir le JS (donc l'Ajax)

  4. #4
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Au temps pour moi ^^ j'ai cru à une confusion mais c'était moi le con. fu.

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 185
    Par défaut
    Oui il y a confusion car il cherche à recuperer des variables URL en javascript via $_GET (php)

Discussions similaires

  1. [AJAX] Récupération id en navigation par onglet
    Par Zadoner dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/04/2007, 09h37
  2. [AJAX] Ajax et plusieurs radios générés par MySQL
    Par Ryu007 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/03/2007, 18h57
  3. [C#][AJAX] Accéder aux DropDownlist d'une table HTML
    Par actarus108 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 27/10/2006, 11h38
  4. [AJAX] Prendre les echos un par un en Ajax
    Par Anduriel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/09/2006, 13h06
  5. [AJAX] Actualisation d'une page par AJAX
    Par jack_1981 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/06/2006, 13h07

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