JeuWeb - Crée ton jeu par navigateur
[Javascript] Petit script Ajax - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Javascript] Petit script Ajax (/showthread.php?tid=737)



[Javascript] Petit script Ajax - Roworll - 31-01-2007

Voici un petit script permettant d'implémenter l'utilisation d'Ajax
Même s'il contient des exemples, ce n'est pas un tutorial complet car son but premier est juste de présenter le script de création d'objet XMLHTTPRequest

Voici donc le script de l'objet lui même

Code PHP :
<?php 
<script language="javascript" type="text/javascript">
function
HTTPObject(){
//xmlhttp est la variable qui va contenir l'objet lui même
var xmlhttp = false;

//args est le tableau des valeurs à passer à la page que l'on veut appeler
var args=new Array();

//vars est un tableau de valeurs associées à l'objet lui même.
//On peut y stocker des valeurs à utiliser après le retour de la fonction
var vars=new Array();

//Cette partie du code permet de créer l'objet XMLHTTPRequest en fonction du navigateur
if ( window.XMLHttpRequest ){
xmlhttp = new window.XMLHttpRequest();
} else {
if (
window.ActiveXObject ) {
//Le code de création pour Windows est simple.
//On peut le simplifier pour gérer les différente versions de l'objet
xmlhttp = new window.ActiveXObject( "Microsoft.XMLHTTP" );
} else {
throw
"XMLHTTPRequest non supporté";
}
}
//Cette méthode permet d'ajouter des éléments au tableau args
this.addArg = function(p,v){
args[p]=v;
}
//Cette méthode permet d'ajouter des éléments au tableau vars
this.setVar = function(p,v){
vars[p]=v;
}
//Méthode pour récupérer une valeur de vars
this.getVar = function(p){
return
vars[p];
}

//Méthode pour récupérer une valeur de args
this.getArg = function(p){
return
args[p];
}

//CallBack permet de spécifier le nom de la fonction à appeler après le traitement asynchrone
//Deux valeurs seront renvoyées :
//- L'objet XMLHTTP lui même
//- le tableau des Variables que on y a sauvegardé
this.callBack = function(func){
xmlhttp.onreadystatechange = function() {
if(
xmlhttp.readyState != 4) return;
try {
xmlhttp.status;}
catch (
e) {return;}
if (
xmlhttp.status != '200' ) {
return;
} else {
eval(
func+'(xmlhttp,vars);');
}
}
}
//Appel à la page de traitment avec la méthode POST
this.post = function(p){
s='';
for(
x in args)
s+='&'+x+'='+args[x];
xmlhttp.open('POST',p,true);
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlhttp.send(s);
}
//Appel à la page de traitment avec la méthode GET
this.get = function(p){
s='';
for(
x in args)
s+='&'+x+'='+args[x];
xmlhttp.open('GET',p+'?'+s,true);
xmlhttp.send(null);
}
}
</
script>

L'utilisation de cet objet est très simple.
Prenons le cas d'une liste de joueurs avec leurs persos.

Supposons qu'on a quelque part quelque chose qui ressemble à
Code PHP :
<?php 
<div onClick="getData(10,54)">Joueur AAA</div>
<
div id="cnt_10" style="display:none"></div>
<
div onClick="getData(11,63)">Joueur BBB</div>
<
div id="cnt_11" style="display:none"></div>

10 est l'ID du joueur,
54 l'ID du perso

En cliquant sur le nom d'un joueur, on veut actualiser le contenu de la page pour faire apparaître le détail.

Code PHP :
<?php 
<script language="javascript" type="text/javascript">
function
getData(j,p) {
//On commence par créer l'objet
var _xhr=new HTTPObject();

//on renseigne ensuite les valeurs qui seront utiles pour le traitement de la saisie
//Ici par exemple j'ai juste besoin d'un ID pour aller rechercher des valeurs associées
_xhr.addArg('joueur_id',j);
_xhr.addArg('perso_id',p);

//On peut même ajouter des variables locales à l'objet
//Je suppose ici que à chaque joueur correspond un élément asocié pour afficher les infos de son porso
//Je stocke en référence l'ID de l'élément HTML ou je dois afficher le résultat du traitement
_xhr.setVar('container','cnt_'+j);

//callBack est la fonction à appeler une fois le traitement terminé.
// Cette valeur peut rester vide si il n'y a pas de retour à afficher
_xhr.callBack('info_recup');

//Ici, on fait un appel à la page getperso.php avec la méthode GET
// L'url appelé ressemble à getjoueur.php?joueur_id=10&perso_id=54
_xhr.get('getperso.php');

//On veut indiquer que la recherche est en cours
//On commence par faire apparaître la zone
document.getElementById('cnt_'+j).style.display='';
//Petit message pour faire patienter
document.getElementById('cnt_'+j).innerHTML='Recherche en cours';
}

//Voici maintenant la fonction qui va traiter le retour de l'appel à PHP
//o est la référence à l'objet XMLHTTPRequest renvoyé en retour
//v est le tableau vars rempli à l'appel
function info_recup(o,v){
document.getElementById(v[container]).innerHTML=o.responseText;
}
</
script>

Dans le fichier getperso.php, les valeurs à utiliser dans la requête sont reçues via $_GET['joueur_id'] et $_GET['perso_id'].
Ce fichier pourrait contenir quelque chose du genre
Code PHP :
<?php 
// Code de connexion //
...

// Requête //
...

//Préparation de la valeur de retour
$_text='Perso : '.$lnP['perso_nom'].'<br />';
$_text.='PV : '.$lnP['perso_vie'].'<br />';
$_text.='XP : '.$lnP['perso_exp'].'<br />';
...

header ('content-type: text/txt');
echo
$_text;

J'insiste sur la définition du type du header.
Sans cela, il y a de grandes chances que PHP retourne un bon gros header HTML bien lourd et totalement inutile.


RE: [Javascript] Petit script Ajax - orditeck - 05-02-2007

L'aide pour ce script ce trouve à cette adresse :
http://www.jeuweb.org/board/showthread.php?tid=1081