sondage ajax

Que pensez vous de ce tutorial AJAX

Résultats

ajax

Écrit par Administrator Lundi, 06 Juin 2011 12:18

L'objet XMLHttpRequest (ajax)

PDFImprimerEnvoyer


Prêt requis : bien connaitre le JavaScript et PHP

Vous avez surement remarqué que lorsque l’on utilise PHP on est obliger de recharger la page ce qui nous remet nos variable par défaut et la barre de navigation au tout en haut

(Sauf avec les $_SESSSION ou cookies en PHP).

Ajax nous permet de ne plus recharger entièrement la page mais seulement une petite partie de cette page.

Ainsi nous pourrons changer l’affichage d’une balise div ou autre et exécuter un script PHP sans recharger entièrement la page, de plus si le traitement PHP est long on peut se permettre d’afficher un message a l’utilisateur pendant le traitement PHP.

Cette technique ce révèle indispensable pour le développement d’un tchat qui nous permet de faire une mise à jour en temps réel des événements survenus récemment.

Pour info Ajax est l’acronyme d’Asynchronous Javascript And XML

Techniquement le principe est d’utiliser des évènements JavaScript pour appeler des fonctions JavaScript, dans la fonction appelée on utilise l’objet XMLHttpRequest, celui-ci à ces propres fonctions permettant de communiquer avec le serveur

Pour internet explorer c’est comme d’habitude légèrement différent, il n’utilise pas XMLHttpRequest mais ActiveXObject, et pour ces fonctions sa ne change pas de XMLHttpRequest.

 

 

 

Sommaire

Les Différentes fonctions (ou méthodes) que l’on abordera seront :

- open

- readyState avec onreadystatechange

- send

- responseText

 

 
 

 

Comme je disais plus haut ces fonctions appartiennes à l’objet XMLHttpRequest

(Pour les navigateurs qui n’appartiennent pas à microsoft)

ou à ActiveXObject

(pour microsoft (IE) )

En objet on ne parle pas de fonctions mais de méthodes.

Astuce

Comment faire fonctionner XMLHttpRequest en même temps qu’ActiveXObject pour permettre que le code fonctionne sur tous les navigateurs ?

Il suffit de créer une fonction qui ce chargera de vérifier le navigateur pour nous donner l’objet

C’est avec cet objet que l’ont vas utiliser les méthodes dites plus haut.

Voici la fonction en question :

function getXhr(){

var xhr = null;

if(window.XMLHttpRequest)

{

xhr = new XMLHttpRequest();

}else if(window.ActiveXObject){

try {

xhr = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e) {

xhr = new ActiveXObject("Microsoft.XMLHTTP");

}

}else{

alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");

xhr = false;

}

return xhr ;

}

var objetAjax = getXhr()

 

Il y a plus qu’à utiliser correctement l’objet avec les différentes méthodes que je vais vous montrer pour que ça fonctionne

 

La méthode open

Elle sert à exécuter une page ou script en PHP

objetAjax.open("GET",page,true);

objetAjax.send(null);


La méthode readyState 

Elle sert à vérifier où en n’est l’état d’avancement du script PHP

Pour déclencher la fonction qui inclut la vérification d’état (readyState) il faut la charger dans l’événement onreadystatechange qui opère à chaque changement d’état

Cela pourrait se comparer avec les évènements déclencheurs onMouseOver,

onload , onMouseMove ect…

Par exemple si on n’arrive pas à l’état 4 on ne pourra pas changer l’affichage générer par le traitement PHP car il n’est pas encore fini.

C’est aussi grâce à l’état que nous pouvons afficher un message pour que l’utilisateur patiente.

Exemple :

objetAjax.onreadystatechange = function()

{

if(objetAjax.readyState == 4 && objetAjax.status == 200)

{

//code javascript genre innerHTML

// avec la methode responseText

//si il y a besoin de changer l’affichage

}else if(objetAjax.readyState < 4 )

{

//code javascript genre innerHTML

// avec la chaine de caractère

//Pour informer l’utilisateur que le traitement est en cour

}

}


La méthode responseText

Elle renvois ce que l’affichage de notre page de traitement php a générer

avec les echo. Cette méthode est à mettre dans innerHTML ou autre code qui fait le même genre d’effet de remplacement.

Exemple : pas besoin d’exemple car vous devez connaitre ce qu’est innerHTML en JavaScript

à placer dans le code un juste au-dessus


La méthode setRequestHeader

Dans notre cas elle nous permet d’envoyer des variables

par la méthode send.

Exemple :

// page a exécuter

objetAjax.open("POST",page,true);

//je ne connais pas les détails mais on en a besoin pour send

objetAjax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

//envois de la variable $_POST[‘message’] sur la page a executer

objetAjax.send("message="+message);


La méthode send

Elle permet d’envoyer des variables post sur la page de traitement PHP

La syntaxe est de la même manière que les variables get affiché dans

l’url

Exemple :

objetAjax.send("prenom=damien&nom=dupond");

 


Voici le Code source allant droit au but:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title>test ajax en Objet Javascript</title>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>
<SCRIPT LANGUAGE="Javascript" >


function getXhr() // Fonction permettant de récupérer l'objet ajax suivant le navigateur
{                           //Vous n'êtes pas obliger de chercher à comprendre comment il fonctionne
                           
// pour l'instant

             var objet = null;

             if(window.XMLHttpRequest){ // Firefox et autres

                           objet = new XMLHttpRequest();

               }else if(window.ActiveXObject) // Internet Explorer
             {

                           try {
                                       objet = new ActiveXObject("Msxml2.XMLHTTP");
                          } catch (e) {
                                       objet = new ActiveXObject("Microsoft.XMLHTTP");
                          }

              }else
              { // XMLHttpRequest non supporté par le navigateur

                          alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
                          objet = false;
              }
              return objet;
}

 


/*****************************************************
*     Fonction ajax à comprendre, elle sera déclencher                         *
*     au clic sur le bouton                                                                     *
******************************************************/

function action()
{
               var objet = getXhr(); // récupère l'objet suivant le navigateur utiliser

                objet.onreadystatechange = function() // fonction a déclencher l'ors du clic sur le bouton
                 {

                              // VERIFIE L'etat d'avancement du traitment PHP

                            // Si traitement fini, afficher les echo du fichier traitement.php 
                             if(objet.readyState == 4 && objet.status == 200)
                             { 


                                    // affichage des echo dans la div
                                    document.getElementById("div").innerHTML= objet.responseText;


                               // Si le traitement n'est pas fini alors je dis à l'utilisateur de patienter
                              }else if(objet.readyState < 4 )
                             {
                                    document.getElementById("div").innerHTML= "En cour de traitement Veuillez Patienter...";
                              }

                 }
                  objet.open("GET","traitement.php",true); // renseigne le fichier php à traiter
                  objet.send(null); // NULL pour dire qu'on a pas besoin de transmettre des variables au traitement PHP


}




</SCRIPT>

</head>

<body>
         <p id="div">La page vien d'etre chager</p>
          <input type="button" onclick="action();" value="Faire un test" />

</body>
</html>

 

Téléchargement du dossier a l'adresse:

http:www.dream3d-informatique.fr/telechargements/exemple_ajax_brut.zip

Evolution sous forme d'objet


Mise en place de ajax découper en plusieurs fichier et simplifier sous form d'objet. J'ai repris le tout et je l'ai appliqué en objet javascript

Voici mon exemple complet avec 3 fichier diffèrent a enregistrer + le frameworks JavaScript jquery à ajouter:


1) ajouter le fichier jquery.js au dossier

2) index.php qui va être notre page de test

3) objetAjax qui va être notre fichier renfermant le code JavaScript simplifiant le ajax sous forme d'objet

4) script PHP a exécuter

 


Créer un dossier dans wamp server

1) ajouter le fichier jquery.js au dossier

2) créer un fichier nommé index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title>test ajax en Objet Javascript</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

<SCRIPT SRC="jquery.js" ></SCRIPT>
<SCRIPT SRC="objetAjax.js" ></SCRIPT>


<SCRIPT LANGUAGE="Javascript" >
                var objetTest = new ajaxObj("traitement.php", '#div');
                objetTest.setPatienter("En cour de traitement Veuillez Patienter...");
</SCRIPT>

</head>

<body>
             <p id="div">La page vien d'etre chager</p>
              <input type="button" onclick="objetTest.traitement();" value="Faire un test" />

</body>
</html>

3) Regarder bien ce code source JavaScript reprenant les lignes ajax que j'ai déjà expliquer au début

    Créer un fichier txt, nomer le objetAjax.js

    Enregistrer ceci dedans:

function getXhr()
{

        var objet = null;

        if(window.XMLHttpRequest){ // Firefox et autres

                    objet = new XMLHttpRequest();

        }else if(window.ActiveXObject) // Internet Explorer
       {

                 try {
                           objet = new ActiveXObject("Msxml2.XMLHTTP");
                 } catch (e) {
                          objet = new ActiveXObject("Microsoft.XMLHTTP");
                }

       }else
      { // XMLHttpRequest non supporté par le navigateur

                  alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
                  objet = false;
       }
       return objet;

}

function ajaxObj(page1, div1)
{

           var page = page1;

           var div = div1;

           var PatienterAff = "";

           var objet = getXhr()

           var message = "";

            this.traitement = function( message )
           {

                    objet.onreadystatechange = function()
                   {


                                if(objet.readyState == 4 && objet.status == 200)
                               {

                                             $(div).html(objet.responseText);

                                }else if(objet.readyState < 4 )
                               {

                                          if( PatienterAff != "NULL")
                                         {

                                                       $(div).html(PatienterAff);

                                          }else
                                         {

                                         }

                               }

                    }

                    objet.open("POST",page,true);
                    objet.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

                    if( message != "")
                    {

                       objet.open("POST",page,true);

                       objet.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

                       objet.send("message="+message);

                    }else
                    {

                       objet.open("GET",page,true);
                       objet.send(null);

                    }

           }

    this.setPatienter = function(chaine)
    {
        PatienterAff = chaine;
    }
    this.getPatienter = function(chaine)
    {
        return PatienterAff;
    }
    this.setDiv = function(chaine)
    {
        div = chaine;
    }
    this.getDiv = function()
    {
        return div;
    }
    this.setFile = function(chaine)
    {
         page = chaine;
    }
    this.getFile = function()
   {
        return page;
    }
    this.setPost = function(chaine)
    {
        message = chaine;
    }
    this.getPost = function()
    {
         return message;
     }

}

4) pour faire simple le fichier php fera un echo "traitement fini" mais rien ne vous empêche de changer ce script.

    Pour simuler un traitement long à effectuer j'ai retardé de 3 secondes avec la fonction php sleep.

    Créer un fichier txt et renommer le en traitement.php

<?php
       sleep(3);
       echo "Traitement fini";
?>

 

Téléchargement du dossier a l'adresse:

http:www.dream3d-informatique.fr/telechargements/exemple_ajax_objet.zip

Voilà vous êtes armé pour débuter en  l’ajax et l'utiliser !

Mise à jour le Vendredi, 10 Juin 2011 09:54