Valid XHTML     Valid CSS2    

Listing du fichier tutajax.php

 

00001     <?php
00002     #    (gH)   -_-  tutajax.php  ;  TimeStamp (unix)&nbsp;: 30 D&eacute;cembre 2009 vers 12:31
00003     include(
"../std7.php") ;
00004     $tg 
"Tuteur AJAX / AJAX Tutorial" ;
00005     debutPage
($tg,"","","tutajax.js","ghlb.ico") ;
00006     debutSection
() ;
00007     ############################################################
00008     
00009     h1
($tg) ;
00010     
00011     p
("align_right") ;
00012     gvert
("gilles.hunault@univ-angers.fr") ;
00013     finp
() ;
00014     
00015     
00016     $tdm 
= array() ;
00017     $nbchap 
;
00018     $nbchap
++ ; $tdm[$nbchap] = "Qu'est-ce qu'AJAX ?" ;
00019     $nbchap
++ ; $tdm[$nbchap] = "Visions et R&eacute;visions&nbsp;: XML" ;
00020     $nbchap
++ ; $tdm[$nbchap] = "Visions et R&eacute;visions c&ocirc;t&eacute; client&nbsp;: Javascript" ;
00021     $nbchap
++ ; $tdm[$nbchap] = "Visions et R&eacute;visions c&ocirc;t&eacute; serveur&nbsp;: fichiers et Php" ;
00022     $nbchap
++ ; $tdm[$nbchap] = "Mise en oeuvre et exemples \"&agrave; la main\"" ;
00023     $nbchap
++ ; $tdm[$nbchap] = "Exemples avec des  biblioth&egrave;ques standard" ;
00024     
00025     h1
("Table des mati&egrave;res") ;
00026     ol
() ;
00027     for ($idc
=1;$idc<=$nbchap;$idc++) {
00028       debutli
() ;
00029       p
() ;
00030       echo href
("#chap_$idc",$tdm[$idc]) ;
00031       finp
() ;
00032       finli
() ;
00033     } ; # fin pour idc
00034     finol
() ;
00035     $nbchap 
;
00036     
00037     ############################################################
00038     #
00039     # 1. Qu'est-ce qu'AJAX ?
00040     #
00041     ############################################################
00042     
00043     $nbchap
++ ; h2(aname("$nbchap. ".$tdm[$nbchap],"chap_$nbchap")) ;
00044     
00045     p
("texte") ;
00046     echo "AJAX est un ensemble de technologies dont le but est de fournir une plus grande r&eacute;activit&eacute; "  
;
00047     echo " au niveau des pages Web. Consultez par exemple les deux formulaires " 
;
00048     echo href
("tutajax1.php","d&eacute;mo 1") ;
00049     echo " et " 
;
00050     echo href
("tutajax3.php","d&eacute;mo 2") ;
00051     echo ".  " 
;
00052     echo " Le formulaire 1 utilise deux pages distinctes&nbsp;: une pour la question et une pour la r&eacute;ponse. " 
;
00053     echo " Le formulaire 2 utilise une seule page, la m&ecirc;me qui sert &agrave; la fois pour la question et pour la r&eacute;ponse. " 
;
00054     echo " Ce deuxi&egrave;me formulaire passe par Javascript et CSS pour afficher la r&eacute;ponse. N'h&eacute;sitez pas &agrave; " 
;
00055     echo " consulter le " 
;
00056     finp
() ;
00057     
00058     ul
() ;
00059     
00060     debutli
() ;
00061     p
() ;
00062     echo " le "
.href("montresource.php?nomfic=tutajax1.php","code-source")." du ".href("tutajax1.php","formulaire 1").", " ;
00063     finp
() ;
00064     finli
() ;
00065     
00066     debutli
() ;
00067     p
() ;
00068     echo " le "
.href("montresource.php?nomfic=tutajax3.php","code-source")." du ".href("tutajax3.php","formulaire 2").", " ;
00069     finp
() ;
00070     finli
() ;
00071     
00072     debutli
() ;
00073     p
() ;
00074     echo " le "
.href("montresource.php?nomfic=tutajax2.php","code-source")." de la r&eacute;ponse au formulaire 1, " ;
00075     finp
() ;
00076     finli
() ;
00077     
00078     debutli
() ;
00079     p
() ;
00080     echo " le "
.href("montresource.php?nomfic=tutajax3.js","code-source")." du code javascript pour la r&eacute;ponse au formulaire 2." ;
00081     finp
() ;
00082     finli
() ;
00083     
00084     finul
() ;
00085     
00086     p
("texte") ;
00087     echo " Le mot "
.b("AJAX")." correspond &agrave; la technique utilis&eacute;e pour le formulaire 2&nbsp;: pas de rechargement de la page et un " ;
00088     echo " traitement des &eacute;l&eacute;ments de la page en Javascript, d'o&ugrave; les deux lettres "
.b("JA")."." ;
00089     echo " Le "
.b("A")." en d&eacute;but signifie ".em("Asynchrone")." (ce qui sera expliqu&eacute; dans la section 5) et " ;
00090     echo " le "
.b("X")." en fin est mis soit pour ".em("XML")." car au niveau le plus technique, les &eacute;l&eacute;ments trait&eacute;s viennent soit d'un document XML " ;
00091     echo " g&eacute;n&eacute;ral soit d'un document HTML suffisamment bien form&eacute;, c'est-&agrave;-dire d'un document XHTML " 
;
00092     echo " qui est un  document XML particulier, soit pour "
.em("XMLHttpRequest")." car c'est l'objet Javascript utilis&eacute;." ;
00093     finp
() ;
00094     
00095     p
("texte") ;
00096     echo "Voici deux autres d&eacute;monstrations d'AJAX (n'h&eacute;sitez pas &agrave; consulter le code-source des pages)&nbsp;: " 
;
00097     finp
() ;
00098     
00099     ul
() ;
00100     
00101     debutli
() ;
00102     p
("texte") ;
00103     echo " une " 
;
00104     echo href
("http://dcabasson.developpez.com/articles/javascript/ajax/ajax-autocompletion-pas-a-pas/fichiers/autocomplete-1.html","liste de suggestions") ;
00105     echo " de mots fran&ccedil;ais issus des 1500 mots de fran&ccedil;ais ma&icirc;tris&eacute;s par les &eacute;l&egrave;ves de CE2 ; " 
;
00106     finp
() ;
00107     finli
() ;
00108     
00109     debutli
() ;
00110     p
("texte") ;
00111     echo " un exemple de " 
;
00112     # source et d&eacute;tail : http://www.salix.gr/ajax_linked_selectboxes
00113     #echo href("http://www.salix.gr/demos/lsb_demo/example.php","listes li&eacute;es dynamiquement") ;
00114     #echo " (on voit bien apparaitre \"wait\" dans les listes le temps d'obtenir les informations)." ;
00115     echo 
href("https://www.devbridge.com/sourcery/components/jquery-autocomplete/","choix de pays").". " ;
00116     finp
() ;
00117     finli
() ;
00118     
00119     finul
() ;
00120     
00121     
00122     p
("texte") ;
00123     echo " Le site (en fran&ccedil;ais et qu'on peut t&eacute;l&eacute;charger officiellement et gratuitement) " 
;
00124     echo href
("../selfhtml_fr/","SELFHTML") ;
00125     #echo " dont le contenu d&eacute;taill&eacute; peut &ecirc;tre consult&eacute; " ;
00126     #echo href("http://www.univ-orleans.fr/webada/html/selfhtml_fr/navigation/contenu.htm","ici") ;
00127     echo 
" nous semble &ecirc;tre une bonne r&eacute;f&eacute;rence pour r&eacute;viser tous les domaines trait&eacute;s dans cette page (XHTML, DOM, Javascript, Xml...) " ;
00128     echo " avant d'aborder AJAX." 
;
00129     finp
() ;
00130     
00131     
00132     ############################################################
00133     #
00134     # 2. Visions et R&eacute;visions : XML
00135     #
00136     ############################################################
00137     
00138     $nbchap
++ ; h2(aname("$nbchap. ".$tdm[$nbchap],"chap_$nbchap")) ;
00139     
00140     p
("texte") ;
00141     echo "XML n'est pas strictement obligatoire mais lorsqu'on doit g&eacute;rer un volume important d'informations structur&eacute;es, ce format s'impose&nbsp;:" 
;
00142     echo " d'une part la structure en arbre permet d'acc&eacute;der rapidement et facilement aux informations ; " 
;
00143     echo " d'autre part, XML est un m&eacute;ta-langage en format texte, ce qui se pr&ecirc;te bien &agrave; une transmission sur le Web." 
;
00144     echo " A d&eacute;faut de lire notre " 
;
00145     echo href
("tutxml.htm","tuteur XML") ;
00146     echo " nous fournissons ici un bref rappel des propri&eacute;t&eacute;s de XML." 
;
00147     finp
() ;
00148     
00149     p
("texte") ;
00150     echo " XML n'est pas un langage mais un m&eacute;ta-langage, qui permet de codifier toute information structur&eacute;e en un fichier " 
;
00151     echo " texte facilement lisible sans support ext&eacute;rieur, contrairement aux formats propri&eacute;taires. Sa structuration hi&eacute;rarchique " 
;
00152     echo " en arbre lui permet d'inclure des contenus homog&egrave;nes et h&eacute;t&eacute;rog&egrave;nes, d'int&eacute;grer les bases de donn&eacute;es aussi bien relationnelles " 
;
00153     echo " que hi&eacute;rarchiques... Par exemple&nbsp;:" 
;
00154     finp
() ;
00155     
00156     pre_fichier
("bd.xml","cadre") ;
00157     
00158     p
("texte") ;
00159     echo "Un fichier XML est un arbre enracin&eacute; au sens informatique du terme&nbsp;: il contient un " 
;
00160     grouge
("&eacute;l&eacute;ment") ;
00161     echo " racine qui contient d'autres " 
;
00162     grouge
("&eacute;l&eacute;ments") ;
00163     echo " pouvant &agrave; leur tour contenir d'autres &eacute;l&eacute;ments qui eux-m&ecirc;mes.... Ces &eacute;l&eacute;ments sont " 
;
00164     echo " rep&eacute;r&eacute;s par des balises ouvrantes et fermantes (mais on peut aussi utiliser des &eacute;l&eacute;ments auto-fermants). " 
;
00165     echo " A chaque &eacute;l&eacute;ment on peut, si besoin est, associer un ou plusieurs " 
;
00166     grouge
("attributs") ;
00167     echo " selon le mod&egrave;le " 
;
00168     gvert
("variable=valeur") ;
00169     echo ". " 
;
00170     echo " Le nom des &eacute;l&eacute;ments et le choix de leurs attributs est libre et chacun peut " 
;
00171     grouge
("inventer sa propre grammaire ") ;
00172     echo " pour " 
;
00173     echo " en d&eacute;finir&nbsp;: " 
;
00174     finp
() ;
00175     
00176     ul
() ;
00177     
00178     debutli
() ;
00179     p
() ;
00180     echo " le vocabulaire (nom des &eacute;l&eacute;ments, noms des attributs, valeurs des attributs...) " 
;
00181     finp
() ;
00182     finli
() ;
00183     
00184     debutli
() ;
00185     p
() ;
00186     echo " la syntaxe (ordre et imbrication des &eacute;l&eacute;ments, cardinalit&eacute; et d&eacute;pendances fonctionnelles...) " 
;
00187     finp
() ;
00188     finli
() ;
00189     
00190     debutli
() ;
00191     p
() ;
00192     echo " la s&eacute;mantique (signification des &eacute;l&eacute;ments, signification des attributs...) " 
;
00193     finp
() ;
00194     finli
() ;
00195     
00196     finul
() ;
00197     
00198     p
("texte") ;
00199     echo " Les r&egrave;gles de construction d'un fichier XML " 
;
00200     gbleuf
("\"bien form&eacute;\"") ;
00201     echo " sont simples et peu nombreuses car il n'y a  " 
;
00202     grouge
(" que des &eacute;l&eacute;ments et des attributs ") ;
00203     echo "&nbsp;: " 
;
00204     finp
() ;
00205     
00206     ul
() ;
00207     
00208     debutli
() ;
00209     p
() ;
00210     echo " tout &eacute;l&eacute;ment ouvert doit &ecirc;tre ferm&eacute; ;"
;
00211     finp
() ;
00212     finli
() ;
00213     
00214     debutli
() ;
00215     p
() ;
00216     echo " aucun chevauchement entre &eacute;l&eacute;ments n'est autoris&eacute; (seulement des imbrications) ; " 
;
00217     finp
() ;
00218     finli
() ;
00219     
00220     debutli
() ;
00221     p
() ;
00222     echo " toute valeur d'attribut (m&ecirc;me num&eacute;rique) doit &ecirc;tre fournie entre guillemets." 
;
00223     finp
() ;
00224     finli
() ;
00225     
00226     finul
() ;
00227     
00228     p
("texte") ;
00229     echo " A cette " 
;
00230     gvert
("simplicit&eacute;") ;
00231     echo " d'&eacute;criture, il faut ajouter la possibilit&eacute; de " 
;
00232     grouge
("v&eacute;rifier") ;
00233     echo " la structure (" 
;
00234     echo "on dit que le fichier est " 
;
00235     grouge
("valide") ;
00236     echo " s'il est  conforme &agrave; sa grammaire)," 
;
00237     echo " de l'" 
;
00238     gbleuf
("analyser") ;
00239     echo ", le " 
;
00240     gbleuf
("parcourir ") ;
00241     echo " et de " 
;
00242     gbleuf
("transformer") ;
00243     echo " tout "
.b("&eacute;l&eacute;ment").", tout ".b("attribut").", tout ".b("sous-arbre")." via des actions &eacute;crites en " ;
00244     echo href
("tutxmlpre.htm#xslt","XSL").". De plus, " ;
00245     echo " ces actions "
.href("../selfhtml_fr/xml/representation/elementsxslt.htm","XSL")." (qui s'&eacute;crivent d'ailleurs en XML), " ;
00246     echo " disposent de toute la richesse des " 
;
00247     echo href
("../selfhtml_fr/xml/representation/fonctionsxpath.htm","\"fonctions informatiques modernes\"") ;
00248     echo "&nbsp;: it&eacute;rateurs de structure, expressions r&eacute;guli&egrave;res, parcours d'arbres param&eacute;tr&eacute;s... " 
;
00249     echo " qui s'appliquent sur des " 
;
00250     #echo href("http://www.univ-orleans.fr/webada/html/selfhtml_fr/xml/representation/syntaxexpath.htm#position_conditions","axes et des ensembles de noeuds de l'arbre")."." ;
00251     echo 
b("axes et des ensembles de noeuds de l'arbre")."." ;
00252     echo " Enfin, pour terminer, il faut signaler que tout navigateur sait ouvrir un fichier XML comme " 
;
00253     echo href
("bd.xml","bd.xml")." et que chaque langage de programmation dispose de fonctions, biblioth&egrave;ques et sous-programmes ";
00254     echo " pour g&eacute;rer toutes ces fonctionnnalit&eacute;s de XML." 
;
00255     finp
() ;
00256     
00257     
00258     ############################################################
00259     #
00260     # 3. Visions et R&eacute;visions client : Javascript
00261     #
00262     ############################################################
00263     
00264     $nbchap
++ ; h2(aname("$nbchap. ".$tdm[$nbchap],"chap_$nbchap")) ;
00265     
00266     p
("texte") ;
00267     echo "Pour utiliser AJAX, il faut bien connaitre Javascript car c'est via ce langage qu'on g&egrave;re les " 
;
00268     echo " informations et les &eacute;l&eacute;ments de la page, ce qui n&eacute;cessite de savoir manipuler " 
;
00269     echo href
("http://www.howtocreate.co.uk/tutorials/javascript/dombasics","DOM")." et de bien connaitre " ;
00270     echo " CSS. On pourra relire au passage la section 6 de notre " 
;
00271     echo href
("tutjs.htm#sEc6.","tuteur Javascript")." pour r&eacute;viser l'acc&egrave;s aux noeuds et &agrave; la gestion dynamique d'un document." ;
00272     finp
() ;
00273     
00274     p
("texte") ;
00275     echo " Pour profiter pleinement d'AJAX, il faut donc savoir r&eacute;cup&egrave;rer l'information &agrave; distance sur les serveurs, " 
;
00276     echo " la parcourir, l'analyser, la restructurer et l'ins&eacute;rer dynamiquement. Il convient donc de maitriser " 
;
00277     echo " les chaines de caract&egrave;res et les fonctions associ&eacute;es ainsi que les tableaux et les expressions r&eacute;guli&egrave;res. " 
;
00278     echo " En particulier, il est bon se savoir appeler correctement les fonctions suivantes " 
;
00279     echo " et de connaitre les propri&eacute;t&eacute;s list&eacute;es&nbsp;: " 
;
00280     finp
() ;
00281     
00282     pre_fichier
("tutajax_lstjs.txt","cadre") ;
00283     
00284     #void var typeof(var)
00285     /*
00286     p("texte") ;
00287     echo "Quelques fonctions &agrave; connaitre&nbsp;: p. 78 the Function constructor " ;
00288     finp() ;
00289     
00290     p("texte") ;
00291     echo "Ev&eacute;nements p. 85, objets, timeOut " ;
00292     finp() ;
00293     */
00294     
00295     p
("texte") ;
00296     echo "On pourra &eacute;galement profiter de la page " 
;
00297     echo href
("https://developer.mozilla.org/fr/une_r%C3%A9introduction_%C3%A0_javascript","r&eacute;introduction") ;
00298     echo " pour d&eacute;couvrir des aspects cach&eacute;s de Javascript." 
;
00299     finp
() ;
00300     
00301     ############################################################
00302     #
00303     # 4. Visions et R&eacute;visions cot&eacute; serveur fichiers et code Php
00304     #
00305     ############################################################
00306     
00307     $nbchap
++ ; h2(aname("$nbchap. ".$tdm[$nbchap],"chap_$nbchap")) ;
00308     
00309     p
("texte") ;
00310     echo "Avec AJAX, on traite tout ce qu'un serveur peut envoyer, soit directement, comme du texte \"brut\", un " 
;
00311     echo " fichier HTML ou un fichier XML, un fichier contenant du code JSON, soit transmis par PHP, Ruby ou tout autre script CGI " 
;
00312     echo " ou application serveur. Voici quelques exemples de liens pouvant &ecirc;tre appel&eacute;s en AJAX&nbsp;:" 
;
00313     finp
() ;
00314     
00315     ul
() ;
00316     
00317     debutli
() ;
00318     p
() ;
00319     echo " du texte brut " 
;
00320     echo " comme "
.href("tutajax_send1a.txt","send1a.txt")." " ;
00321     echo " ou "
.href("tutajax_send1b.txt","send1b.txt").", " ;
00322     finp
() ;
00323     finli
() ;
00324     
00325     debutli
() ;
00326     p
() ;
00327     echo " du "
.href("tutajax_send2.txt","texte &agrave; analyser").", " ;
00328     finp
() ;
00329     finli
() ;
00330     
00331     debutli
() ;
00332     p
() ;
00333     echo " du code XHTML &agrave; ins&eacute;rer " 
;
00334     echo " comme "
.href("montresource.php?nomfic=tutajax_send3a.html","send3a.html")." " ;
00335     echo " ou "
.href("montresource.php?nomfic=tutajax_send3b.html","send3b.html").". " ;
00336     finp
() ;
00337     finli
() ;
00338     
00339     debutli
() ;
00340     p
() ;
00341     echo " du code XML &agrave; g&eacute;rer " 
;
00342     echo " comme "
.href("montresource.php?nomfic=tutajax_send4a.xml","send4a.xml")." (que des &eacute;l&eacute;ments) " ;
00343     echo " ou "
.href("montresource.php?nomfic=tutajax_send4b.xml","send4b.xml")." (des &eacute;l&eacute;ments et des atributs), " ;
00344     finp
() ;
00345     finli
() ;
00346     
00347     debutli
() ;
00348     p
() ;
00349     echo " du "
.href("tutajax_send5.txt","code JSON fixe &agrave; interpr&eacute;ter").". " ;
00350     finp
() ;
00351     finli
() ;
00352     
00353     debutli
() ;
00354     p
() ;
00355     echo " du "
.href("tutajax_send6.php","code JSON g&eacute;n&eacute;r&eacute; &agrave; la vol&eacute;e en PHP")." " ;
00356     echo " par "
.href("montresource.php?nomfic=tutajax_send6.php","ce programme").". " ;
00357     finp
() ;
00358     finli
() ;
00359     
00360     finul
() ;
00361     
00362     p
("texte") ;
00363     echo "La section suivante montre comment traiter tous ces exemples. " 
;
00364     finp
() ;
00365     
00366     ############################################################
00367     #
00368     # 5. Mise en oeuvre et Exemples "&agrave; la main"
00369     #
00370     ############################################################
00371     
00372     $nbchap
++ ; h2(aname("$nbchap. ".$tdm[$nbchap],"chap_$nbchap")) ;
00373     
00374     ## -----------------------------------------------------------------------------------------
00375     
00376     p
("texte") ;
00377     echo "Le principe d'AJAX est simple&nbsp;: on vient charger les contenus "
.b("externes")." dont on a besoin au fur et &agrave; mesure. " ;
00378     echo " Contrairement &agrave; un chargement "
.b("synchrone")." de la page o&ugrave; toute la page est charg&eacute;e " ;
00379     echo " d&egrave;s le d&eacute;part, on charge &agrave; la demande (en mode "
.b("asynchrone")." d'o&ugrave; le premier ".b("A")." de ".b("AJAX").")" ;
00380     echo " le contenu. Le terme asynchrone est sans doute mal choisi car le chargement est en fait &agrave; la fois " 
;
00381     echo " asynchrone avec le chargement de la page et synchrone " 
;
00382     echo " avec les &eacute;v&egrave;nements-utilisateurs. Dire \"&agrave; la vol&eacute;e\" ou \"&agrave; la demande\" serait donc sans doute plus exact." 
;
00383     echo " Comme les diff&eacute;rentes versions de Javascript des divers navigateurs (IE, FF...) n'impl&egrave;mentent les " 
;
00384     echo " m&ecirc;mes fonctions associ&eacute;es, il faut recourir &agrave; une technique d'interception des "
.b("\"exceptions\"") ;
00385     echo " avec " 
;
00386     gvert
("try/catch") ;
00387     echo " avant d'acc&egrave;der aux informations que l'on r&eacute;cup&egrave;re via des propri&eacute;t&eacute;s " 
;
00388     gvert
(" responseText, responseXML") ;
00389     echo " d'un flux correctement attendu, ouvert et envoy&eacute; (fonctions " 
;
00390     gvert
(" open, send, onreadystatechange") ;
00391     echo "... " 
;
00392     echo " propri&eacute;t&eacute;s " 
;
00393     gvert
(" readyState, status") ;
00394     echo "...). " 
;
00395     echo " Une fois l'information r&eacute;cup&eacute;r&eacute;e, il faut l'ins&eacute;rer, la substituer, l'afficher... &agrave; l'aide des " 
;
00396     echo href
("../refcards/javascript_cheat_sheet.pdf","fonctions DOM") ;
00397     echo " qui permettent de manipuler le document." 
;
00398     echo " On se m&eacute;fiera du traitement des noeuds (&eacute;l&eacute;ments) d'un document XML qui est diff&eacute;rent d'un " 
;
00399     echo " navigateur &agrave; l'autre. La d&eacute;monstration est " 
;
00400     echo href
("tutajaxml.php","ici")."." ;
00401     finp
() ;
00402     
00403     p
("texte") ;
00404     echo "On lira avec attention le fichier " 
;
00405     echo href
("montresource.php?nomfic=tutajax.js","tutajax.js") ;
00406     echo " qui contient l'ensemble des fonctions utilis&eacute;es pour les exemples qui suivent " 
;
00407     echo " et qui d&eacute;taillent cette technique." 
;
00408     echo " Pour ceux et celles qui pr&eacute;f&egrave;rent un expos&eacute; plus \"lin&eacute;aire\", on pourra consulter " 
;
00409     echo " les liens suivants&nbsp;: " 
;
00410     finp
() ;
00411     
00412     ul
() ;
00413     
00414     debutli
() ;
00415     p
() ;
00416     echo href
("http://www.xul.fr/xml-ajax.html","Tutoriel AJAX ")." (xul.fr)," ;
00417     finp
() ;
00418     finli
() ;
00419     
00420     debutli
() ;
00421     p
() ;
00422     echo href
("http://dcabasson.developpez.com/articles/javascript/ajax/ajax-autocompletion-pas-a-pas/","Autocompl&eacute;tion en AJAX ")." (developpez.com)," ;
00423     finp
() ;
00424     finli
() ;
00425     
00426     debutli
() ;
00427     p
() ;
00428     echo href
("http://www.toutjavascript.com/savoir/xmlhttprequest.php3","XMLHTTPRequest en fran&ccedil;ais ")." (toutjavascript.com)," ;
00429     finp
() ;
00430     finli
() ;
00431     
00432     debutli
() ;
00433     p
() ;
00434     #echo href("http://www.salix.gr/ajax_linked_selectboxes","Listes d&eacute;pendantes")." avec AjAX, PHP, MYSQL en anglais (salix.gr)," ;
00435     echo 
href("https://makitweb.com/jquery-ui-autocomplete-with-php-and-ajax/","autocompl&eacute;tion BD")." avec AjAX, PHP, MYSQL en anglais," ;
00436     finp
() ;
00437     finli
() ;
00438     
00439     # source et d&eacute;tail : http://www.salix.gr/ajax_linked_selectboxes
00440     
00441     debutli
() ;
00442     p
() ;
00443     echo href
("http://www.ibm.com/developerworks/xml/library/x-ffox3/","JavaScript meets XML in Firefox") ;
00444     echo " XSLT via Javascript, en anglais (www.ibm.com/developerworks)." 
;
00445     finp
() ;
00446     finli
() ;
00447     
00448     finul
() ;
00449     
00450     ## -----------------------------------------------------------------------------------------
00451     
00452     p
("texte") ;
00453     echo "Commen&ccedil;ons par ins&eacute;rer du texte brut. Choisissez le personnage dans la liste " 
;
00454     echo " suivante et regardez le texte qui apparait dans le cadre gris&eacute;&nbsp;: " 
;
00455     finp
() ;
00456     
00457     pvide
() ;
00458     
00459     form
("tutajax4.php","get","onsubmit='ajaxv1(this.personnage) ; return false'") ;
00460     p
("centre") ;
00461     echo s_span
("Personnage&nbsp;: ","cadre tajaunec") ;
00462     nbsp
(3) ;
00463     input_radio
("personnage","JC","Jules C&eacute;sar","","checked") ;
00464     input_radio
("personnage","FP","Fran&ccedil;ois Premier") ;
00465     nbsp
(3) ;
00466     input_submit
("go1") ;
00467     finp
() ;
00468     finform
() ;
00469     
00470     pvide
() ;
00471     
00472     pre
("cadre","ajax1") ;
00473     echo "(au d&eacute;part, ce cadre ne contient rien...)" 
;
00474     finpre
() ;
00475     
00476     ## -----------------------------------------------------------------------------------------
00477     
00478     p
("texte") ;
00479     echo "Passons maintenant &agrave; la gestion d'une liste de s&eacute;lection. Choisissez la date dans la liste " 
;
00480     echo " suivante et regardez le texte associ&eacute;&nbsp;: " 
;
00481     finp
() ;
00482     
00483     form
("tutajax4.php","get","onsubmit='ajaxv2(this.datehist) ; return false'") ;
00484     p
("centre") ;
00485     echo "Date&nbsp;: " 
;
00486     nbsp
(3) ;
00487     input_select
("datehist") ;
00488     input_option
("800")  ;
00489     input_option
("1492") ;
00490     input_option
("1515") ;
00491     input_option
("1754") ;
00492     input_option
("1989") ;
00493     finselect
() ;
00494     nbsp
(3) ;
00495     input_submit
("go2") ;
00496     nbsp
(3) ;
00497     input_text
("ajax2","description","50","tarose") ;
00498     finp
() ;
00499     finform
() ;
00500     
00501     ## -----------------------------------------------------------------------------------------
00502     
00503     p
("texte") ;
00504     echo "L'exemple suivant vient remplir le paragraphe suivant dans le document&nbsp;: " 
;
00505     finp
() ;
00506     
00507     form
("tutajax4.php","get","onsubmit='ajaxv3(this.abon) ; return false'") ;
00508     p
("centre") ;
00509     echo "Je suis&nbsp;: " 
;
00510     nbsp
(3) ;
00511     input_radio
("abon","oui","abonn&eacute;","","checked") ;
00512     input_radio
("abon","non","non abonn&eacute;") ;
00513     nbsp
(3) ;
00514     input_submit
("go3") ;
00515     finp
() ;
00516     finform
() ;
00517     
00518     p
("texte","ajax3") ;
00519     gbleuf
("Ceci est le paragraphe original.") ;
00520     finp
() ;
00521     
00522     ## -----------------------------------------------------------------------------------------
00523     
00524     p
("texte") ;
00525     echo "Nous allons maintenant lire le fichier XML \"tout &eacute;l&eacute;ment \" nomm&eacute; "
.href("tutajax_send4a.xml") ;
00526     echo "  pour trouver le prix de l'article  choisi&nbsp;: " 
;
00527     finp
() ;
00528     
00529     form
("tutajax4.php","get","onsubmit='ajaxv4(this.article) ; return false'") ;
00530     p
("centre") ;
00531     echo "Articles&nbsp;: " 
;
00532     nbsp
(3) ;
00533     input_select
("article") ;
00534     input_option
("montre")  ;
00535     input_option
("t&eacute;l&eacute;phone") ;
00536     finselect
() ;
00537     nbsp
(3) ;
00538     input_submit
("go4") ;
00539     nbsp
(3) ;
00540     input_text
("ajax4","prix","50","tarose") ;
00541     finp
() ;
00542     finform
() ;
00543     
00544     ## -----------------------------------------------------------------------------------------
00545     
00546     p
("texte") ;
00547     echo "La version &eacute;l&eacute;ments/attributs de la lecture du fichier XML "
.href("tutajax_send4b.xml")." n'est pas plus difficile&nbsp;: " ;
00548     finp
() ;
00549     
00550     form
("tutajax4.php","get","onsubmit='ajaxv5(this.objet) ; return false'") ;
00551     p
("centre") ;
00552     echo "Articles&nbsp;: " 
;
00553     nbsp
(3) ;
00554     input_select
("objet") ;
00555     input_option
("montre")  ;
00556     input_option
("t&eacute;l&eacute;phone") ;
00557     finselect
() ;
00558     nbsp
(3) ;
00559     input_submit
("go5") ;
00560     nbsp
(3) ;
00561     input_text
("ajax5","prix","50","tarose") ;
00562     finp
() ;
00563     finform
() ;
00564     
00565     ## -----------------------------------------------------------------------------------------
00566     
00567     p
("texte") ;
00568     echo "Le texte JSON s'ex&eacute;cute directement (ou plut&ocirc;t il est facilement &eacute;valu&eacute;)&nbsp;: " 
;
00569     finp
() ;
00570     
00571     form
("tutajax4.php","get","onsubmit='ajaxv6(this.jour) ; return false'") ;
00572     p
("centre") ;
00573     echo "Rendez-vous&nbsp;: " 
;
00574     nbsp
(3) ;
00575     input_radio
("jour","lundi","lundi","","checked") ;
00576     input_radio
("jour","mardi","mardi") ;
00577     input_radio
("jour","samedi","samedi") ;
00578     nbsp
(3) ;
00579     input_submit
("go6") ;
00580     finp
() ;
00581     finform
() ;
00582     
00583     pre
("cadre","ajax6") ;
00584     echo "(date non choisie) " 
;
00585     finpre
() ;
00586     
00587     ## -----------------------------------------------------------------------------------------
00588     
00589     p
("texte") ;
00590     echo "Lorsqu'on essaie de d&eacute;bugger du javascript et de l'AJAX, &agrave; part la technique d'une zone d'informations via " 
;
00591     echo " un &eacute;l&eacute;ment &lt;pre&gt; (comme dans la page " 
;
00592     echo href
("tutajaxml.php") ;
00593     echo " dont le code-source php est " 
;
00594     echo href
("montresource.php?nomfic=tutajaxml.php","ici") ;
00595     echo " avec son " 
;
00596     echo href
("montresource.php?nomfic=litdemoxml.js","code javascript") ;
00597     echo " et dont le code xhtml g&eacute;n&eacute;r&eacute; est " 
;
00598     echo href
("montresource.php?nomfic=tutajaxml.txt","l&agrave;") ;
00599     echo ")" 
;
00600     echo " on peut se servir, " 
;
00601     grouge
("sous Firefox") ;
00602     echo ", de la \"Console d'erreurs\" via le menu \"Outils\", " 
;
00603     echo " ou utiliser " 
;
00604     echo href
("https://addons.mozilla.org/fr/firefox/addon/1843","Firebug") ;
00605     echo ". Signalons au passage qu'une fois activ&eacute;, Firebug, dans son panneau \"R&eacute;seau\", montre " 
;
00606     echo " les appels  comme on peut le voir sur l'image ci-dessous&nbsp;: " 
;
00607     finp
() ;
00608     
00609     p
("centre") ;
00610     echo href
("firebug.png",img("firebug.png","firebug",400)) ;
00611     finp
() ;
00612     
00613     p
("texte") ;
00614     echo "Depuis la version 9.5, Opera fournit un outil similaire, nomm&eacute; "
.b("Dragonfly")." qui s'active " ;
00615     echo " via Outils / Avanc&eacute; / Outils de d&eacute;veloppeur&nbsp;: " 
;
00616     finp
() ;
00617     
00618     p
("centre") ;
00619     echo href
("dragonfly.png",img("dragonfly.png","dragonfly",400)) ;
00620     finp
() ;
00621     
00622     p
("texte") ;
00623     echo "Pour les autres navigateurs, on pourra utiliser " 
;
00624     echo href
("http://getfirebug.com/lite.html","Firebug Lite") ;
00625     echo " que vous pouvez activer sur cette page en cliquant sur le bouton suivant (il faut compter quelques secondes pour " 
;
00626     echo " le chargement et le lancement)&nbsp;: " 
;
00627     finp
() ;
00628     
00629     pvide
() ;
00630     
00631     p
("centre") ;
00632     echo ancre
(".","activer !","bouton_rectangulaire_sur_fond_bleu","btnhref") ;
00633     finp
() ;
00634     
00635     # on met la bonne URL pour Firebug Lite meme si elle est non valide au sens de xhtml
00636     
00637     jsf
("firebuglitebtn.js") ;
00638     
00639     pvide
() ;
00640     
00641     ############################################################
00642     #
00643     # 6. Exemples avec des biblioth&egrave;ques standard
00644     #
00645     ############################################################
00646     
00647     $nbchap
++ ; h2(aname("$nbchap. ".$tdm[$nbchap],"chap_$nbchap")) ;
00648     
00649     p
("texte") ;
00650     echo "Il existe diff&eacute;rentes biblioth&egrave;ques pour faire de l'AJAX (et plus g&eacute;n&eacute;ralement pour d&eacute;velopper en Javascript), dont&nbsp;: " 
;
00651     echo href
("http://www.dojotoolkit.org/","Dojo").", " ;
00652     echo href
("http://jquery.com/","JQuery").", " ;
00653     echo href
("http://www.prototypejs.org/","Prototype")." et " ;
00654     echo href
("http://mochikit.com/","Mochikit")."." ;
00655     finp
() ;
00656     
00657     p
("texte") ;
00658     echo "Ces biblioth&egrave;ques ou " 
;
00659     echo href
("http://fr.wikipedia.org/wiki/".urlencode("Cadre_d'application_AJAX"),"\"frameworks\"") ;
00660     echo " fournissent du code Javascript pr&ecirc;t &agrave; l'emploi qui sait g&eacute;rer les divers " 
;
00661     echo " navigateurs et fournit des fonctions de \"haut niveau\" " 
;
00662     echo "(comme la " 
;
00663     echo href
("http://dcabasson.developpez.com/articles/javascript/ajax/documentation-prototype-1.4.0/#L1","fonction \$") ;
00664     echo " de Prototype" 
;
00665     echo " ou "
.href("http://docs.jquery.com/How_jQuery_Works#Launching_Code_on_Document_Ready","celle")." de jQuery" ;
00666     echo ")" 
;
00667     echo " pour simplifier les " 
;
00668     echo " requ&ecirc;tes, mises en forme, actions... de fa&ccedil;on &agrave; offir, via un navigateur, " 
;
00669     echo " de vraies applications." 
;
00670     echo " En plus des "
.href("http://www.info.univ-angers.fr/pub/richer/ensl3iwe.php","pages AJAX") ;
00671     echo " de notre coll&egrave;gue J. M. RICHER " 
;
00672     echo " (dont le "
.href("http://www.info.univ-angers.fr/pub/richer/ens/l3info/web/examples/dom5/index.html","fameux exemple des CD").")," ;
00673     echo " on pourra consulter, pour avoir une id&eacute;e " 
;
00674     echo " des possibilit&eacute;s offertes, les liens qui suivent&nbsp;: " 
;
00675     finp
() ;
00676     
00677     ul
() ;
00678     
00679     debutli
() ;
00680     p
() ;
00681     echo "la page des "
.href("http://demos.dojotoolkit.org/demos/","d&eacute;monstrations")." de Dojo," ;
00682     echo " dont "
.href("http://dojocampus.org/explorer/","Feature Explorer"). " avec une mention sp&eacute;ciale " ;
00683     echo " pour "
.href("http://dojocampus.org/explorer/#Dijit_Menu_Popup%201","Dijit/Menu").", " ;
00684     echo " les pages "
.href("http://dojocampus.org/explorer/#Dijit_Tree","Dijit/Tree")." et " ;
00685     echo href
("http://demos.dojotoolkit.org/demos/flashCards/","Dojo.schools()")."." ;
00686     finp
() ;
00687     finli
() ;
00688     
00689     debutli
() ;
00690     p
() ;
00691     echo " avec jQuery&nbsp;: une "
.href("http://docs.jquery.com/UI/Progressbar","barre de progressions") ;
00692     echo ", un "
.href("http://docs.jquery.com/UI/Accordion","accord&eacute;on")." (il faut peut-&ecirc;re cliquer " ;
00693     echo " sur View Source avant de cliquer sur Demo), la liste des UI (" 
;
00694     echo href
("http://jqueryui.com/demos/","User Interfaces").") dont ".href("http://jqueryui.com/demos/droppable/","droppable")."." ;
00695     finp
() ;
00696     finli
() ;
00697     
00698     debutli
() ;
00699     p
() ;
00700     echo href
("http://prototypejs.org/learn/introduction-to-ajax","Ajax")." via Prototype " ;
00701     echo " &agrave; l'aide des objets "
href("http://prototypejs.org/api/ajax/request","Ajax.Request")."," ;
00702     echo " et "
.href("http://prototypejs.org/api/ajax/updater","Ajax.Updater")."." ;
00703     finp
() ;
00704     finli
() ;
00705     
00706     debutli
() ;
00707     p
() ;
00708     echo " les "
.href("http://mochikit.com/demos.html","exemples")." de MochiKit dont une solution &agrave; la fonction ".b("alert")."&nbsp;: " ;
00709     echo " le panneau de \"log\" ou "
.href("https://mochi.github.io/mochikit/doc/html/MochiKit/LoggingPane.html","Logging Pane")." en anglais " ;
00710     echo " (cliquer sur le lien "
.b("Inline LoggingPane")." puis sur les diff&eacute;rentes ".b("Logging Actions").")." ;
00711     finp
() ;
00712     finli
() ;
00713     
00714     finul
() ;
00715     
00716     p
("texte") ;
00717     echo "Pour conclure, on remarquera que malheureusement tous ces ensembles de fonctions ne produisent pas syst&eacute;matiquement " 
;
00718     echo " du code XHTML valide, que ce soit pour la grammaire transitionnelle ou stricte, ce qui peut &ecirc;tre dommageable " 
;
00719     echo " &agrave; un site qui se veut exemplaire en termes d'accessibilit&eacute;, de respect des standards W3C... " 
;
00720     echo " De m&ecirc;me, la notion de contenu dynamique fourni &agrave; la demande est antinomique avec le r&eacute;f&eacute;rencement de contenu." 
;
00721     echo " L&agrave; encore, on voit bien que le d&eacute;veloppement Web va encore changer dans les prochaines ann&eacute;es..." 
;
00722     finp
() ;
00723     
00724     #####################################################
00725     
00726     pvide
() ;
00727     
00728     p
() ;
00729     echo href
("montresource.php?nomfic=tutajax.php","Code-source PHP de cette page","orange_stim nou")." &nbsp; ; &nbsp;" ;
00730     echo href
("montresource.php?nomfic=tutajax.js"," code Javascript utilis&eacute;","bleu nou")."." ;
00731     finp
() ;
00732     
00733     ############################################################
00734     
00735     finSection
() ;
00736     finPage
() ;
00737     ?>

Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.

 

 

retour gH    Retour à la page principale de   (gH)