<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2721247973472564493</id><updated>2024-09-01T14:28:41.057-07:00</updated><title type='text'>JavaScript</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-4623439363831817392</id><published>2010-09-10T18:26:00.000-07:00</published><updated>2010-09-10T18:26:26.729-07:00</updated><title type='text'>Optimiser ses développements</title><content type='html'>L&#39;optimisation du code et des temps de réponse est un sujet rarement évoqué dans le développement web.&lt;br /&gt;
L&#39;optimisation est souvent réservée aux applications professionnelles
sensibles. Pourtant tout webmaster est concerné directement par cette
question.&lt;br /&gt;
Le développement des accès haut-débit depuis près de 2 ans a 2 conséquences majeures :&lt;br /&gt;
- l&#39;augmentation du nombre d&#39;internautes et donc de visiteurs potentiels&lt;br /&gt;
- l&#39;augmentation du temps moyen de connexion et donc du nombre de pages vues&lt;br /&gt;
&lt;br /&gt;
Les hébergeurs ont pour la plupart déjà fait profiter leurs clients
d&#39;augmentation de la bande passante.
Par exemple chez OVH, la bande passante fournie avec les serveurs
dédiées a pratiquement été multipliée par 10 en 2004, sans supplément
de prix. &lt;br /&gt;
La bande passante qui était encore récemment un point critique ne pose
plus réellement de problème, sauf pour certaines applications
spécifiques de téléchargement ou de radio en ligne par exemple.&lt;br /&gt;
En revanche, la puissance des serveurs n&#39;a pas suivi le même rythme de
croissance que l&#39;augmentation de la population d&#39;internautes : on
considère généralement que la puissance des processeurs double tous les
18 mois selon la loi de Moore qui prédit &quot;seulement&quot; que &quot;&lt;i&gt;le nombre de transistors par cicuit de même taille va doubler tous les 18 mois&lt;/i&gt;&quot;.&lt;br /&gt;
C&#39;est bien la puissance CPU qui est devenu le facteur limitant aujourd&#39;hui.&lt;br /&gt;
Les hébergeurs sont très attentifs à la consommation CPU des sites sur
hébergements mutualisés. En cas de dépassement des limites, l&#39;accès
peut être coupé.&lt;br /&gt;
Pour un site sur serveur dédié, l&#39;optimisation du code permet de
proposer à ses visiteurs un site rapide et fiable et d&#39;éviter la
surenchère technologique et les coûts associés à l&#39;augmentation des
capacités matérielles.&lt;br /&gt;
&lt;br /&gt;
Une optimisation réussie apporte pour vos visiteurs un plus grand
confort de navigation et pour vous une meilleure maîtrise des coûts
d&#39;hébergement et surtout une plus grande sérénité par rapport aux
risques de plantages du site.&lt;br /&gt;
&lt;br /&gt;
Nous allons voir dans ce tutorial comment mesurer les performances d&#39;un
site et les différents moyens d&#39;optimiser les temps de traitement coté
SQL, PHP et configuration.&lt;br /&gt;
Je n&#39;ai pas la prétention d&#39;être exhaustif dans ces quelques pages. Je
donne simplement quelques solutions que j&#39;ai mises en application
moi-même avec un certain succès au niveau PHP, MySQL et Apache.&lt;br /&gt;
N&#39;hésitez pas à me signaler les éventuelles erreurs et vos solutions d&#39;optimisation.&lt;br /&gt;
&lt;br /&gt;
Voici le sommaire de cet article (les prochaines parties suivent bientôt).&lt;br /&gt;
1 - &lt;a href=&quot;http://www.toutjavascript.com/savoir/optimiser_performance.php3&quot;&gt;Mesurer les performances&lt;/a&gt;&lt;br /&gt;
Etape indispensable pour optimiser : être capable de faire l&#39;état des lieux et de mesurer les améliorations.&lt;br /&gt;
&lt;br /&gt;
2 - &lt;a href=&quot;http://www.toutjavascript.com/savoir/optimiser_mysql.php3&quot;&gt;Optimiser MySQL&lt;/a&gt;&lt;br /&gt;
Le moteur SQL est certainement l&#39;élément qui a le plus fort potentiel d&#39;optimisation.&lt;br /&gt;
&lt;br /&gt;
3 - &lt;a href=&quot;http://www.toutjavascript.com/savoir/optimiser_cache_mysql.php3&quot;&gt;Utiliser le cache MySQL&lt;/a&gt;&lt;br /&gt;
A partir de la version 4 de MySQL, une gestion de cache ouvre de nouvelles possibilités.&lt;br /&gt;
&lt;br /&gt;
4 - &lt;a href=&quot;http://www.toutjavascript.com/savoir/optimiser_cache_php.php3&quot;&gt;Utiliser les caches fichiers&lt;/a&gt;&lt;br /&gt;
Les principes du cache et une solution détaillée avec Cache Lite.&lt;br /&gt;
&lt;br /&gt;
5 - &lt;a href=&quot;http://www.toutjavascript.com/savoir/optimiser_serveur.php3&quot;&gt;Optimiser le serveur&lt;/a&gt;&lt;br /&gt;
Il existe de nombreuses astuces efficaces pour accélérer les traitements sur le serveur.&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/4623439363831817392/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/optimiser-ses-developpements.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/4623439363831817392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/4623439363831817392'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/optimiser-ses-developpements.html' title='Optimiser ses développements'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-216575680257969233</id><published>2010-09-10T18:24:00.001-07:00</published><updated>2010-09-10T18:24:40.027-07:00</updated><title type='text'>Structure d&#39;une base de données</title><content type='html'>&lt;span class=&quot;titre2&quot;&gt;Introduction&lt;/span&gt;&lt;br /&gt;


Devant le succès des premiers tutoriaux sur le PHP, voici une introduction aux bases de données.&lt;br /&gt;
L&#39;avantage considérable d&#39;un langage serveur comme le PHP est qu&#39;il
peut conserver des données saisies par des utilisateurs, les traiter,
les trier et les afficher aux autres visiteurs. Avec le PHP, on peut
donc faire des forums, des livres d&#39;or, des sondages. Bref tout ce qui
est interactif sur le web.&lt;br /&gt;
&lt;br /&gt;
Pour sauver des données, beaucoup pensent que le meilleur moyen est
d&#39;utiliser des fichiers texte. C&#39;est une solution possible. La solution
la plus souple et nécessitant le moins de développements est la base de
données. Toutes les fonctions de sélection, de tri, de recherche,
d&#39;insertion, de modification et de suppression sont possibles grâce aux
langage de requêtes SQL (Structured Query Language).&lt;br /&gt;
&lt;br /&gt;
C&#39;est donc l&#39;utilisation des bases de données MySQL avec PHP que nous allons aborder dans ce tutorial.&lt;br /&gt;
&lt;br /&gt;
PHP est très souvent utilisé en association avec le système de gestion
de base de données (SGBD) MySQL. Les hébergeurs qui supportent le PHP
proposent tous MySQL. De même le package EasyPHP que nous avons déjà vu
dans le tutorial &lt;a href=&quot;&quot;&gt;Introduction au PHP&lt;/a&gt; installe automatiquement MySQL. Nous sommes donc prêts à démarrer avec une base de données.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Avertissement 1&lt;/b&gt; : La lecture des tutoriaux &quot;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir17.php3&quot;&gt;JavaScript et PHP&lt;/a&gt;&quot;, &quot;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir23.php3&quot;&gt;Introduction au PHP&lt;/a&gt;&quot; et &quot;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir24.php3&quot;&gt;Traiter des données en PHP&lt;/a&gt;&quot; est un pré-requis absolument nécessaire.&lt;br /&gt;
&lt;b&gt;Avertissement 2&lt;/b&gt; : Ce tutorial est une vulgarisation des bases de
données. L&#39;objectif est de comprendre leur fonctionnement et leur
intérêt (par rapport aux fichiers texte par exemple) et d&#39;apprendre à
les utiliser. Celui qui vient me parler de 3ème forme normale ou de
méthode MERISE dans ce contexte n&#39;a rien compris à l&#39;esprit de cette
section du site...&lt;br /&gt;
&lt;b&gt;Avertissement 3&lt;/b&gt; : Les bases de données sont très puissantes,
mais il faut un minimum de concentration et de travail pour comprendre.
N&#39;imaginez pas que vous allez faire un script de forum en 30 minutes.
Que les fainéants passent directement à autre chose.&lt;br /&gt;
&lt;br /&gt;
Plan du tutorial :&lt;br /&gt;
&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir29.php3&quot;&gt;1 - Structure d&#39;une base de données&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir29_1.php3&quot;&gt;2 - Utilisation de PHPMyAdmin&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir29_2.php3&quot;&gt;3 - Accès à une base de données en SQL&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir29_3.php3&quot;&gt;4 - Accès à une base de données en PHP&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre2&quot;&gt;Structure d&#39;une base de données&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;A quoi sert une base de données&lt;/span&gt;&lt;br /&gt;
Une base de données est destinée :&lt;br /&gt;
- à stocker des données structurées et organisées
- à manipuler ces données grâce a leur organisation.&lt;br /&gt;
&lt;br /&gt;
Une base de données contient des tables ayant des rapports logiques entre elles.&lt;br /&gt;
Une table peut être comparer à un tableau de données.&lt;br /&gt;
&lt;br /&gt;
Dans ce tutorial, nous allons prendre l&#39;exemple de la base de données &lt;span class=&quot;code&quot;&gt;Catalogue&lt;/span&gt; qui contient les tables &lt;span class=&quot;code&quot;&gt;Catégorie&lt;/span&gt; et &lt;span class=&quot;code&quot;&gt;Produit&lt;/span&gt;. L&#39;objectif est donc de créer une base de données qui contiendra toutes les informations d&#39;un catalogue de produits.&lt;br /&gt;
On a souvent tendance à confondre base et table. Ce sont pourtant 2 objets bien différents.&lt;br /&gt;
Une base regroupe des tables sur le même domaine d&#39;informations (ici le domaine catalogue de produits).&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Table et clé primaire&lt;/span&gt;&lt;br /&gt;
La table &quot;&lt;span class=&quot;code&quot;&gt;Categorie&lt;/span&gt;&quot;, dont le but est de lister toutes les catégories du catalogue, est définie comme ceci :&lt;br /&gt;
&lt;br /&gt;
&lt;table bgcolor=&quot;navy&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;2&quot; cellspacing=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
 &lt;td align=&quot;center&quot; bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;&lt;b&gt;Identifiant&lt;/b&gt;&lt;/td&gt;
 &lt;td align=&quot;center&quot; bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;&lt;b&gt;Nom&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;1&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;Processeur AMD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;2&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;Processeur Intel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;3&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;Mémoire RAM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;4&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;Carte mère&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Chaque ligne d&#39;une table correspond à un enregistrement. Ici un enregistrement est une catégorie.&lt;br /&gt;
Une colonne est une propriété d&#39;un enregistrement.&lt;br /&gt;
Cette table contient 2 colonnes : &lt;br /&gt;
La colonne &quot;&lt;span class=&quot;code&quot;&gt;Nom&lt;/span&gt;&quot; sert à enregistrer le nom d&#39;une catégorie sous forme de texte.&lt;br /&gt;
La colonne &quot;&lt;span class=&quot;code&quot;&gt;Identifiant&lt;/span&gt;&quot; est un nombre entier qui sert à identifier de manière unique un enregistrement (ou ligne) de la table.&lt;br /&gt;
On appelle cet identifiant unique la &lt;b&gt;clé primaire&lt;/b&gt; de la table. On pourrait également identifier une catégorie par son nom. Mais il faut éviter car : &lt;br /&gt;
- le nom peut changer (erreur de saisie par exemple) &lt;br /&gt;
- le SQL est beaucoup plus rapide pour manipuler des entier.&lt;br /&gt;
&lt;br /&gt;
L&#39;identifiant d&#39;une table permet également de faire des liens avec
d&#39;autres tables. Nous allons voir comment faire un lien entre un
produit et sa catégorie.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Liens entre tables&lt;/span&gt;&lt;br /&gt;
La table &quot;&lt;span class=&quot;code&quot;&gt;produit&lt;/span&gt;&quot;, dont le but est de contenir les produits d&#39;un catalogue, est définie comme ceci :&lt;br /&gt;
&lt;table bgcolor=&quot;navy&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;2&quot; cellspacing=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
 &lt;td align=&quot;center&quot; bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;&lt;b&gt;Identifiant&lt;/b&gt;&lt;/td&gt;
 &lt;td align=&quot;center&quot; bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;&lt;b&gt;Nom&lt;/b&gt;&lt;/td&gt;
 &lt;td align=&quot;center&quot; bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;&lt;b&gt;Prix&lt;/b&gt;&lt;/td&gt;
 &lt;td align=&quot;center&quot; bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;&lt;b&gt;Vignette&lt;/b&gt;&lt;/td&gt;
 &lt;td align=&quot;center&quot; bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;&lt;b&gt;Categorie&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;1&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;AMD Athlon XP 2000 +&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;98&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;vignette/athlon.gif&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;2&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;Intel Pentium 4 2GHz&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;245&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;vignette/p4.gif&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;3&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;Intel Céléron 2 GHz&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;145&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;vignette/celeron.gif&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;4&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;Barette DDR 512 Mo PC2100&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;56&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;vignette/ddr.gif&lt;/td&gt;
 &lt;td bgcolor=&quot;white&quot; class=&quot;texte&quot;&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;

Ici aussi, une ligne correspond à un enregistrement, c&#39;est-à-dire à un produit.&lt;br /&gt;
- Nous retrouvons également l&#39;identifiant unique (ou clé primaire)&lt;br /&gt;
- La colonne &lt;span class=&quot;code&quot;&gt;Nom&lt;/span&gt; contient le nom du produit&lt;br /&gt;
- La colonne &lt;span class=&quot;code&quot;&gt;Prix&lt;/span&gt; contient le prix sous forme numérique&lt;br /&gt;
- La colonne &lt;span class=&quot;code&quot;&gt;Vignette&lt;/span&gt; contient l&#39;adresse d&#39;une image correspondant au produit&lt;br /&gt;
- La colonne &lt;span class=&quot;code&quot;&gt;Categorie&lt;/span&gt; contient un nombre qui est un lien vers la clé primaire de la table &lt;span class=&quot;code&quot;&gt;Categorie&lt;/span&gt;.
Vous remarquez qu&#39;on n&#39;enregistre pas le nom de la catégorie dans cette
colonne, mais juste un identifiant. Dans ce cas, la colonne est une clé
externe vers la table &lt;span class=&quot;code&quot;&gt;Categorie&lt;/span&gt;.&lt;br /&gt;
Voici les avantages d&#39;utiliser une clé externe :&lt;br /&gt;
- Gain de place de stockage (Enregistrer un entier est bien moins volumineux que d&#39;enregistrer un libellé complet)&lt;br /&gt;
- Gain de mise à jour (Si un jour le libellé Processeur Intel doit
devenir Processeur INTEL, il suffit de changer la ligne 2 de la table &lt;span class=&quot;code&quot;&gt;Categorie&lt;/span&gt; et tous les produits de la catégorie 2 profiteront de la mise à jour)&lt;br /&gt;
- Gain de rapidité (Manipuler un entier est plus rapide que manipuler du texte)&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Modèle de données&lt;/span&gt;&lt;br /&gt;
Un modèle graphique de représentation du schéma de la base avec les liens entre base serait :&lt;br /&gt;
&lt;br /&gt;
&lt;img alt=&quot;Modèle de données&quot; height=&quot;189&quot; src=&quot;http://www.toutjavascript.com/savoir/sgbd01.gif&quot; width=&quot;489&quot; /&gt;
&lt;br /&gt;
Les tables sont représentées par des boîtes avec leur nom et leurs colonnes.&lt;br /&gt;
La colonne &lt;span class=&quot;code&quot;&gt;Identifiant&lt;/span&gt; est soulignée car elle correspond à la clé primaire.&lt;br /&gt;
La clé externe &lt;span class=&quot;code&quot;&gt;Categorie&lt;/span&gt; de la table &lt;span class=&quot;code&quot;&gt;Produit&lt;/span&gt; est reliée par une flèche à la table &lt;span class=&quot;code&quot;&gt;Categorie&lt;/span&gt; pour montrer le lien.&lt;br /&gt;
La simple flèche vers la table &lt;span class=&quot;code&quot;&gt;Categorie&lt;/span&gt; montre qu&#39;un produit peut être attaché à une seule catégorie.&lt;br /&gt;
La double flèche vers la table &lt;span class=&quot;code&quot;&gt;Produit&lt;/span&gt; montre qu&#39;une catégorie peut concerner plusieurs produits.&lt;br /&gt;
&lt;br /&gt;
On pourrait enrichir la base en ajoutant une table des marques de
produits avec une clé externe entre un produit et sa marque. Le modèle
de données serait alors :&lt;br /&gt; 
&lt;br /&gt;
&lt;img alt=&quot;Modèle de données&quot; height=&quot;406&quot; src=&quot;http://www.toutjavascript.com/savoir/sgbd02.gif&quot; width=&quot;486&quot; /&gt;
&lt;br /&gt;


&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Questions fréquentes sur les bases de données&lt;/span&gt;&lt;br /&gt;
* Le nombre de produits n&#39;est pas stocké dans la table &lt;span class=&quot;code&quot;&gt;Categorie&lt;/span&gt; car on peut le retrouver autrement.&lt;br /&gt;
Il suffit de compter le nombre de produits par colonne &lt;span class=&quot;code&quot;&gt;Categorie&lt;/span&gt;.&lt;br /&gt;
On sait par exemple qu&#39;il y a 2 produits de la catégorie &quot;Processeur Intel&quot;.&lt;br /&gt;
En règle générale, il faut éviter de stocker des données redondantes
qui peuvent être retrouvées autrement. Sauf dans certains cas, si le
moyen de retrouver cette donnée est gourmand en ressources CPU ou si
cette donnée est souvent demandée.&lt;br /&gt;
&lt;br /&gt;
* Il n&#39;est pas utile de gérer les numéros d&#39;identifiant manuellement.
Le système de base de données le gère automatiquement en incrémentant
l&#39;identifiant d&#39;une unité à chaque insertion de ligne.&lt;br /&gt;
&lt;br /&gt;
* Les caractères spéciaux (accents, espace, ...) sont à éviter dans les noms des tables et des colonnes.&lt;br /&gt;
Il est egalement conseillé d&#39;éviter d&#39;appeler une table ou une colonne par un mot réservé du SQL.&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/216575680257969233/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/structure-dune-base-de-donnees.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/216575680257969233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/216575680257969233'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/structure-dune-base-de-donnees.html' title='Structure d&#39;une base de données'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-1456248709939656016</id><published>2010-09-10T18:23:00.000-07:00</published><updated>2010-09-10T18:23:21.032-07:00</updated><title type='text'>Le formulaire HTML</title><content type='html'>Ce tutorial est un complément du script &quot;Notation par curseur et
smileys&quot; qui permet ainsi d&#39;enregistrer la note saisie par les
visiteurs. Le traitement dédié à ce script est détaillé dans la
troisième page de cet article.&lt;br /&gt;
Le javascript ne permet pas de traiter des données pour les enregistrer dans une base de données ou un fichier.&lt;br /&gt;
La solution est d&#39;utiliser un langage serveur. PHP est de loin le plus
accessible et le plus courant. Je vous conseille la lecture des
tutoriaux &quot;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir23.php3&quot;&gt;Introduction au PHP&lt;/a&gt;&quot; et &quot;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir.php3&quot;&gt;Javascript et PHP&lt;/a&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre2&quot;&gt;1 - Le formulaire HTML&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Définition d&#39;un formulaire&lt;br /&gt;
&lt;/b&gt;Le moyen le plus courant pour transmettre des informations depuis le visiteur vers le serveur est d&#39;utiliser les formulaires.&lt;br /&gt;
Un formulaire est défini par la balise &lt;span class=&quot;code&quot;&gt;&amp;lt;FORM&amp;gt;&lt;/span&gt; et &lt;span class=&quot;code&quot;&gt;&amp;lt;/FORM&amp;gt;&lt;/span&gt;.&lt;br /&gt;
Voici un exemple de formulaire&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;lt;FORM name=&quot;monform&quot; action=&quot;page.php&quot; method=&quot;post&quot; target=&quot;_blank&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Zone de texte : &amp;lt;INPUT type=&quot;text&quot; name=&quot;champtexte&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;INPUT type=&quot;submit&quot; value=&quot;Envoyer&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/FORM&amp;gt;&lt;br /&gt;
&lt;/span&gt;
&lt;br /&gt;
qui donne l&#39;affichage suivant :&lt;br /&gt;
&lt;form action=&quot;page.php&quot; method=&quot;post&quot; name=&quot;monform&quot; target=&quot;_blank&quot;&gt;
&lt;br /&gt;
Zone de texte : &lt;input name=&quot;champtexte&quot; type=&quot;text&quot; /&gt;&lt;br /&gt;
&lt;input type=&quot;button&quot; value=&quot;Envoyer&quot; /&gt;&lt;br /&gt;
&lt;/form&gt;
&lt;br /&gt;
Un objet FORM a comme paramètre un nom, une action et une méthode de transmission vers le serveur.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;name&lt;/span&gt; sert à manipuler et reconnaître l&#39;objet FORM dans la page&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;action&lt;/span&gt; contient l&#39;adresse du script qui va recevoir et traiter les données du formulaire. Ici le formulaire sera envoyé à &quot;page.php&quot;.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;method&lt;/span&gt; indique le type de transmission des
données. &quot;post&quot; cache les données transmises au visiteur. &quot;get&quot; les
rend visibles. Je préfère utiliser &quot;post&quot; qui est plus discret et qui
n&#39;allonge pas l&#39;url dans la barre d&#39;adresse.&lt;br /&gt;
On peut aussi définir une destination par le paramètre &lt;span class=&quot;code&quot;&gt;target&lt;/span&gt;, équivalent au target de la balise de lien &amp;lt;A&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Envoi du formulaire&lt;br /&gt;
&lt;/b&gt;L&#39;envoi du formulaire (ou soumission ou submit en anglais) peut se faire de 2 manières.&lt;br /&gt;
- Soit par un bouton de type submit :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&amp;lt;INPUT type=&quot;submit&quot; value=&quot;Envoyer&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
Dans ce cas, le formulaire est envoyé directement quand on clique sur le bouton&lt;br /&gt;
&lt;br /&gt;
- Soit par du javascript :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;document.monform.submit()&lt;/span&gt;&lt;br /&gt;
Voir le &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir06.php3&quot;&gt;tutorial javascript sur les formulaires&lt;/a&gt; pour tous les détails sur la manipulation des formulaires.&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/1456248709939656016/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/le-formulaire-html.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/1456248709939656016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/1456248709939656016'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/le-formulaire-html.html' title='Le formulaire HTML'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-7778870213910517754</id><published>2010-09-10T18:22:00.000-07:00</published><updated>2010-09-10T18:22:11.231-07:00</updated><title type='text'>PHP langage serveur</title><content type='html'>J&#39;ai décidé de présenter cette introduction au PHP pour 3 raisons :&lt;br /&gt;
1 - Le PHP est un langage de plus en plus utilisé qu&#39;il serait dommage de ne pas adopter très vite,&lt;br /&gt;
2 - Beaucoup me posent des questions de base sur le php,&lt;br /&gt;
3 - Le javascript ne peut pas tout faire (loin de la) et le PHP est un allié puissant.&lt;br /&gt;
&lt;br /&gt;
Je n&#39;ai pas l&#39;ambition dans ce tutorial de faire mieux que mes collègues spécialistes du PHP (voir &lt;a href=&quot;http://www.toutjavascript.com/annuaire/index.php3&quot;&gt;l&#39;annuaire&lt;/a&gt;
pour une sélection des meilleurs sites traitant du php). Je souhaite
simplement présenter les bases de ce langage puissant, facile et
passionnant.&lt;br /&gt;
Je vous invite à lire &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir17.php3&quot;&gt;cet autre tutorial&lt;/a&gt; qui présente le principe d&#39;un langage serveur et les différences entre le javascript et le PHP.&lt;br /&gt;

&lt;br /&gt;
&lt;span class=&quot;titre2&quot;&gt;1 - PHP langage serveur&lt;/span&gt;&lt;br /&gt;
A la grande différence du javascript, le PHP est exécuté sur le serveur, AVANT que le visiteur ne recoive la page.&lt;br /&gt;
Pour simplifier, un visiteur tape une adresse dans son navigateur
(www.monsite.com/page.php), le script PHP contenu dans le fichier
page.php est exécuté par le serveur puis renvoyé vers le visiteur. Si
cette page contient du code javascript, le visiteur pourra alors
l&#39;exécuter sur son ordinateur.&lt;br /&gt;
Cela signifie donc que pour exécuter du code PHP, il faut faire un
appel au serveur, c&#39;est-à-dire ouvrir une page dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
Pour exécuter un script PHP, il faut que le serveur reconnaisse et
comprenne le PHP. Ce n&#39;est pas le cas de tous les hébergeurs, même si
de plus en plus ont intégré le support du PHP. &lt;br /&gt;
&lt;br /&gt;
Quelques hébergeurs gratuits qui supportent le PHP :&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border: 1px solid navy;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: navy; border: 1px solid navy;&quot;&gt;
 &lt;td align=&quot;center&quot; class=&quot;texte&quot; style=&quot;border: 1px solid navy; color: white;&quot;&gt;&lt;b&gt;Hébergeur&lt;/b&gt;&lt;/td&gt;
 &lt;td align=&quot;center&quot; class=&quot;texte&quot; style=&quot;border: 1px solid navy; color: white;&quot;&gt;&lt;b&gt;Adresse&lt;/b&gt;&lt;/td&gt;
 &lt;td align=&quot;center&quot; class=&quot;texte&quot; style=&quot;border: 1px solid navy; color: white;&quot;&gt;&lt;b&gt;Inconvénients&lt;/b&gt;&lt;/td&gt;
 &lt;td align=&quot;center&quot; class=&quot;texte&quot; style=&quot;border: 1px solid navy; color: white;&quot;&gt;&lt;b&gt;Mon avis&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border: 1px solid navy;&quot;&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Multimania&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;&lt;a href=&quot;http://www.multimania.fr/&quot; target=&quot;_blank&quot;&gt;www.multimania.fr&lt;/a&gt;&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Pub par popup ou DHTML&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;La pub est vraiment trop présente&lt;br /&gt;Acheté par Lycos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border: 1px solid navy;&quot;&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Chez&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;&lt;a href=&quot;http://www.chez.com/&quot; target=&quot;_blank&quot;&gt;www.chez.com&lt;/a&gt;&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Publicité par popup ou frame&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Trop de pub aussi&lt;br /&gt;Acheté par Tiscali&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border: 1px solid navy;&quot;&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Respublica&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;&lt;a href=&quot;http://www.respublica.fr/&quot; target=&quot;_blank&quot;&gt;www.respublica.fr&lt;/a&gt;&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Migration vers Chez.com&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Trop de pub aussi&lt;br /&gt;Acheté par Tiscali&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border: 1px solid navy;&quot;&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Freesurf&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;&lt;a href=&quot;http://www.freesurf.fr/&quot; target=&quot;_blank&quot;&gt;www.freesurf.fr&lt;/a&gt;&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Publicité par popups&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Trop de pub aussi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background-color: #fffccc; border: 1px solid navy;&quot;&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Free&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;&lt;a href=&quot;http://www.free.fr/&quot; target=&quot;_blank&quot;&gt;www.free.fr&lt;/a&gt;&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Obligation de souscrire à l&#39;offre d&#39;accès sans abonnement&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Aucune publicité.&lt;br /&gt;Hébergement vivement conseillé&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Il y en a bien d&#39;autres...&lt;br /&gt;
&lt;br /&gt;
Attention, Wanadoo ou Ifrance, par exemple, ne le supportent pas encore (septembre 2002).&lt;br /&gt;
Je vous recommande Free.fr comme hébergement, sans aucune publicité. La
seule contrepartie est d&#39;ouvrir un compte (sans abonnement) chez eux.&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/7778870213910517754/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/php-langage-serveur_10.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/7778870213910517754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/7778870213910517754'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/php-langage-serveur_10.html' title='PHP langage serveur'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-4411599146356185274</id><published>2010-09-10T18:21:00.000-07:00</published><updated>2010-09-10T18:21:28.936-07:00</updated><title type='text'>PHP langage serveur</title><content type='html'>J&#39;ai décidé de présenter cette introduction au PHP pour 3 raisons :&lt;br /&gt;
1 - Le PHP est un langage de plus en plus utilisé qu&#39;il serait dommage de ne pas adopter très vite,&lt;br /&gt;
2 - Beaucoup me posent des questions de base sur le php,&lt;br /&gt;
3 - Le javascript ne peut pas tout faire (loin de la) et le PHP est un allié puissant.&lt;br /&gt;
&lt;br /&gt;
Je n&#39;ai pas l&#39;ambition dans ce tutorial de faire mieux que mes collègues spécialistes du PHP (voir &lt;a href=&quot;http://www.toutjavascript.com/annuaire/index.php3&quot;&gt;l&#39;annuaire&lt;/a&gt;
pour une sélection des meilleurs sites traitant du php). Je souhaite
simplement présenter les bases de ce langage puissant, facile et
passionnant.&lt;br /&gt;
Je vous invite à lire &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir17.php3&quot;&gt;cet autre tutorial&lt;/a&gt; qui présente le principe d&#39;un langage serveur et les différences entre le javascript et le PHP.&lt;br /&gt;

&lt;br /&gt;
&lt;span class=&quot;titre2&quot;&gt;1 - PHP langage serveur&lt;/span&gt;&lt;br /&gt;
A la grande différence du javascript, le PHP est exécuté sur le serveur, AVANT que le visiteur ne recoive la page.&lt;br /&gt;
Pour simplifier, un visiteur tape une adresse dans son navigateur
(www.monsite.com/page.php), le script PHP contenu dans le fichier
page.php est exécuté par le serveur puis renvoyé vers le visiteur. Si
cette page contient du code javascript, le visiteur pourra alors
l&#39;exécuter sur son ordinateur.&lt;br /&gt;
Cela signifie donc que pour exécuter du code PHP, il faut faire un
appel au serveur, c&#39;est-à-dire ouvrir une page dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
Pour exécuter un script PHP, il faut que le serveur reconnaisse et
comprenne le PHP. Ce n&#39;est pas le cas de tous les hébergeurs, même si
de plus en plus ont intégré le support du PHP. &lt;br /&gt;
&lt;br /&gt;
Quelques hébergeurs gratuits qui supportent le PHP :&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border: 1px solid navy;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: navy; border: 1px solid navy;&quot;&gt;
 &lt;td align=&quot;center&quot; class=&quot;texte&quot; style=&quot;border: 1px solid navy; color: white;&quot;&gt;&lt;b&gt;Hébergeur&lt;/b&gt;&lt;/td&gt;
 &lt;td align=&quot;center&quot; class=&quot;texte&quot; style=&quot;border: 1px solid navy; color: white;&quot;&gt;&lt;b&gt;Adresse&lt;/b&gt;&lt;/td&gt;
 &lt;td align=&quot;center&quot; class=&quot;texte&quot; style=&quot;border: 1px solid navy; color: white;&quot;&gt;&lt;b&gt;Inconvénients&lt;/b&gt;&lt;/td&gt;
 &lt;td align=&quot;center&quot; class=&quot;texte&quot; style=&quot;border: 1px solid navy; color: white;&quot;&gt;&lt;b&gt;Mon avis&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border: 1px solid navy;&quot;&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Multimania&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;&lt;a href=&quot;http://www.multimania.fr/&quot; target=&quot;_blank&quot;&gt;www.multimania.fr&lt;/a&gt;&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Pub par popup ou DHTML&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;La pub est vraiment trop présente&lt;br /&gt;Acheté par Lycos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border: 1px solid navy;&quot;&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Chez&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;&lt;a href=&quot;http://www.chez.com/&quot; target=&quot;_blank&quot;&gt;www.chez.com&lt;/a&gt;&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Publicité par popup ou frame&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Trop de pub aussi&lt;br /&gt;Acheté par Tiscali&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border: 1px solid navy;&quot;&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Respublica&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;&lt;a href=&quot;http://www.respublica.fr/&quot; target=&quot;_blank&quot;&gt;www.respublica.fr&lt;/a&gt;&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Migration vers Chez.com&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Trop de pub aussi&lt;br /&gt;Acheté par Tiscali&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border: 1px solid navy;&quot;&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Freesurf&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;&lt;a href=&quot;http://www.freesurf.fr/&quot; target=&quot;_blank&quot;&gt;www.freesurf.fr&lt;/a&gt;&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Publicité par popups&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Trop de pub aussi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background-color: #fffccc; border: 1px solid navy;&quot;&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Free&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;&lt;a href=&quot;http://www.free.fr/&quot; target=&quot;_blank&quot;&gt;www.free.fr&lt;/a&gt;&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Obligation de souscrire à l&#39;offre d&#39;accès sans abonnement&lt;/td&gt;
 &lt;td class=&quot;texte&quot; style=&quot;border: 1px solid navy;&quot;&gt;Aucune publicité.&lt;br /&gt;Hébergement vivement conseillé&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Il y en a bien d&#39;autres...&lt;br /&gt;
&lt;br /&gt;
Attention, Wanadoo ou Ifrance, par exemple, ne le supportent pas encore (septembre 2002).&lt;br /&gt;
Je vous recommande Free.fr comme hébergement, sans aucune publicité. La
seule contrepartie est d&#39;ouvrir un compte (sans abonnement) chez eux.&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/4411599146356185274/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/php-langage-serveur.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/4411599146356185274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/4411599146356185274'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/php-langage-serveur.html' title='PHP langage serveur'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-1594969436567704634</id><published>2010-09-10T18:20:00.000-07:00</published><updated>2010-09-10T18:20:28.255-07:00</updated><title type='text'>AJAX / XMLHTTPRequest</title><content type='html'>&lt;div class=&quot;VisiblePage&quot;&gt;
&lt;div class=&quot;Navi&quot;&gt;
&lt;div class=&quot;Row&quot;&gt;
&lt;span class=&quot;Left&quot;&gt;Tutorial sur les requêtes serveur en JavaScript&lt;/span&gt;

  &lt;span class=&quot;Right&quot;&gt;&lt;img alt=&quot;Compatible Internet Explorer 6&quot; class=&quot;Hint&quot; height=&quot;16&quot; src=&quot;http://robloche.free.fr/logo_ie_navi.gif&quot; title=&quot;Compatible Internet Explorer 6&quot; width=&quot;16&quot; /&gt;&amp;nbsp;&lt;img alt=&quot;Compatible Mozilla Firefox 1.0&quot; class=&quot;Hint&quot; height=&quot;16&quot; src=&quot;http://robloche.free.fr/logo_firefox_navi.gif&quot; title=&quot;Compatible Mozilla Firefox 1.0&quot; width=&quot;16&quot; /&gt;&lt;/span&gt;
 &lt;/div&gt;
&lt;/div&gt;
Une question revient souvent sur les forums dédiés au JavaScript&amp;nbsp;:
Peut-on réaliser une requête sur le serveur sans (re)charger une page
et sans utiliser d&#39;astuces telles qu&#39;une frame invisible ou une fenêtre
popup&amp;nbsp;? Jusqu&#39;à peu, je pensais que la réponse était aussi claire que
négative. Et puis j&#39;ai découvert &lt;span class=&quot;CodeScriptInside&quot;&gt;XMLHTTPRequest&lt;/span&gt;
et la réponse est devenue&amp;nbsp;: «&amp;nbsp;Oui&amp;nbsp;!&amp;nbsp;» Mais les documentations sur ce
sujet ne se bousculent pas sur le net, notamment en français. D&#39;où
cette petite introduction aux objets &lt;span class=&quot;CodeScriptInside&quot;&gt;XMLHTTPRequest&lt;/span&gt;
(que nous appellerons ainsi même si le nom diffère d&#39;un navigateur à
l&#39;autre). Pour l&#39;instant, c&#39;est uniquement compatible Internet Explorer
et Firefox mais je crois avoir lu quelques informations intéressantes
pour Opera&lt;span style=&quot;font-size: 10px; font-weight: bold;&quot;&gt;[1]&lt;/span&gt;. Quant à Netscape, bah... je ne suis pas nécrophile.&lt;br /&gt;
Avant d&#39;entrer dans le vif du sujet, je tiens à remercier tous les habitués du forum de &lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/&quot;&gt;ToutJavaScript.com&lt;/a&gt;
et notamment Aurélien pour son explication limpide sur les fonctions à
retardement (j&#39;espère les avoir bien utilisées) et poof65 pour sa
collaboration lors de la création d&#39;une classe d&#39;abstraction des objets
&lt;span class=&quot;CodeScriptInside&quot;&gt;XMLHTTPRequest&lt;/span&gt;.&lt;br /&gt;
&lt;div style=&quot;font-size: 10px;&quot;&gt;
&lt;span style=&quot;font-size: 10px; font-weight: bold;&quot;&gt;[1]&lt;/span&gt;
Opera est actuellement en train d&#39;évoluer et devrait bientôt gérer
complètement ces objets. Au moment où j&#39;écris ces lignes, les exemples
des sections 1. et 2. fonctionnent normalement sous Opera 8 beta.
L&#39;exemple de la section 3. fonctionne mais le résultat arrive deux
fois. Celui de la section 4. ne fonctionne qu&#39;avec la méthode &lt;span class=&quot;CodeScriptInside&quot;&gt;get&lt;/span&gt;. Et le dernier, celui de la section 5. fait carrément planter l&#39;application.&lt;/div&gt;
&lt;div class=&quot;Centered&quot;&gt;
&lt;div class=&quot;QuickMenu&quot;&gt;
Accès rapide aux sections&lt;/div&gt;
&lt;ul class=&quot;QuickMenu&quot;&gt;
&lt;li&gt;&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_01&quot;&gt;Présentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_02&quot;&gt;À quoi cela peut-il servir&amp;nbsp;?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_03&quot;&gt;Synchrone Vs. Asynchrone&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;Last&quot;&gt;&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_04&quot;&gt;Transmettre des données&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;QuickMenu Bottom&quot;&gt;
&lt;li&gt;&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_05&quot;&gt;Exemple concret d&#39;utilisation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_06&quot;&gt;Propriétés et méthodes&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;Last&quot;&gt;&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_07&quot;&gt;Quelques liens&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; id=&quot;section_01&quot; name=&quot;section_01&quot;&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class=&quot;Section&quot;&gt;
1. Présentation&lt;/div&gt;
Comme leur nom ne l&#39;indique pas, les objets &lt;span class=&quot;CodeScriptInside&quot;&gt;XMLHTTPRequest&lt;/span&gt; permettent de récupérer toutes sortes de données, et pas seulement des fichiers &lt;acronym title=&quot;eXtended Markup Language&quot;&gt;XML&lt;/acronym&gt;. Pour effectuer une requête, il faut tout d&#39;abord déclarer une certaine variable. Ce qui se fait de manière différente avec &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;/acronym&gt; et Firefox. Sous &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;/acronym&gt;, on utilise un objet ActiveX et sous Firefox, on dispose d&#39;un type &lt;i&gt;ad hoc&lt;/i&gt;.
Ensuite, on envoie la requête et enfin, on attend la réponse. Ci-après,
vous pouvez voir un exemple très basique faisant une requête sur la
présente page (&lt;span class=&quot;CodeScriptInside&quot;&gt;location.href&lt;/span&gt;). Une fois la réponse obtenue, une boîte d&#39;alerte s&#39;affiche.&lt;br /&gt;
&lt;div class=&quot;Centered&quot;&gt;
&lt;input class=&quot;ButtonXL&quot; onclick=&quot;request01()&quot; type=&quot;button&quot; value=&quot;Exécuter l&#39;exemple&quot; /&gt;&lt;/div&gt;
&amp;gt; &lt;a class=&quot;Toggle&quot; href=&quot;javascript:void(0)&quot; onclick=&quot;toggleCode(&#39;01&#39;)&quot;&gt;&lt;span id=&quot;s_code_01&quot;&gt;Voir le code JavaScript&lt;/span&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div id=&quot;code_01&quot; style=&quot;display: none;&quot;&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;dp-jscript&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;tools-corner&quot;&gt;&lt;/td&gt;&lt;td class=&quot;tools&quot;&gt;&lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.ViewSource(this); return false;&quot;&gt;view plain&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.PrintSource(this); return false;&quot;&gt;print&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.About(this); return false;&quot;&gt;?&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;1&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;xhr_object&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;null&lt;/span&gt;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;2&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;3&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;commonlibs&quot;&gt;window&lt;/span&gt;.&lt;span class=&quot;builtins&quot;&gt;XMLHttpRequest&lt;/span&gt;)&amp;nbsp;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;Firefox&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;4&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xhr_object&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;XMLHttpRequest&lt;/span&gt;();&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;5&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;commonlibs&quot;&gt;window&lt;/span&gt;.&lt;span class=&quot;builtins&quot;&gt;ActiveXObject&lt;/span&gt;)&amp;nbsp;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;Internet&amp;nbsp;Explorer&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;6&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xhr_object&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;ActiveXObject&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;Microsoft.XMLHTTP&quot;&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;7&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;XMLHttpRequest&amp;nbsp;non&amp;nbsp;supporté&amp;nbsp;par&amp;nbsp;le&amp;nbsp;navigateur&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;8&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;alert&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;Votre&amp;nbsp;navigateur&amp;nbsp;ne&amp;nbsp;supporte&amp;nbsp;pas&amp;nbsp;les&amp;nbsp;objets&amp;nbsp;XMLHTTPRequest...&quot;&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;9&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;10&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;}&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;11&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;12&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;xhr_object.&lt;span class=&quot;builtins&quot;&gt;open&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;GET&quot;&lt;/span&gt;,&amp;nbsp;location.href,&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;false&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;13&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;xhr_object.&lt;span class=&quot;builtins&quot;&gt;send&lt;/span&gt;(&lt;span class=&quot;keyword&quot;&gt;null&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;14&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(xhr_object.&lt;span class=&quot;builtins&quot;&gt;readyState&lt;/span&gt;&amp;nbsp;==&amp;nbsp;4)&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;alert&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;Requête&amp;nbsp;effectuée&amp;nbsp;!&quot;&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;textarea class=&quot;javascript&quot; name=&quot;code&quot; style=&quot;display: none;&quot;&gt;var xhr_object = null;

if(window.XMLHttpRequest) // Firefox
   xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
   xhr_object = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
else { // XMLHttpRequest non supporté par le navigateur
   alert(&quot;Votre navigateur ne supporte pas les objets XMLHTTPRequest...&quot;);
   return;
}

xhr_object.open(&quot;GET&quot;, location.href, false);
xhr_object.send(null);
if(xhr_object.readyState == 4) alert(&quot;Requête effectuée !&quot;);
&lt;/textarea&gt;
&lt;/div&gt;
&lt;div class=&quot;SubSection&quot;&gt;
Comment ça marche&amp;nbsp;?&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;CodeLine&quot;&gt;ligne 4&amp;nbsp;:&lt;/span&gt; on crée une instance de l&#39;objet &lt;span class=&quot;CodeScriptInside&quot;&gt;XMLHTTPRequest&lt;/span&gt; sous Firefox&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeLine&quot;&gt;ligne 6&amp;nbsp;:&lt;/span&gt; on crée une instance de l&#39;objet &lt;span class=&quot;CodeScriptInside&quot;&gt;XMLHTTPRequest&lt;/span&gt; sous &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;/acronym&gt;&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeLine&quot;&gt;ligne 12&amp;nbsp;:&lt;/span&gt; on spécifie la méthode de transmission des données, l&#39;&lt;acronym title=&quot;Universal Ressouce Locator&quot;&gt;URL&lt;/acronym&gt; et le mode de transmission de la requête&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeLine&quot;&gt;ligne 13&amp;nbsp;:&lt;/span&gt; on exécute la requête proprement dite&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeLine&quot;&gt;ligne 14&amp;nbsp;:&lt;/span&gt; on affiche une boîte d&#39;alerte dès que la requête est terminée.&lt;/li&gt;
&lt;/ul&gt;
&lt;span class=&quot;Note&quot;&gt;Note&lt;/span&gt;&amp;nbsp;: Ces fonctions sont détaillées en &lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_06&quot;&gt;section&amp;nbsp;6&lt;/a&gt;.&lt;br /&gt;
&lt;div class=&quot;Right&quot;&gt;
[&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#top&quot;&gt;haut de la page&lt;/a&gt;]&lt;/div&gt;
&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; id=&quot;section_02&quot; name=&quot;section_02&quot;&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class=&quot;Section&quot;&gt;
2. À quoi cela peut-il servir&amp;nbsp;?&lt;/div&gt;
Dans l&#39;exemple précédent, la requête se contente de demander un
certain fichier sans s&#39;occuper du résultat. Mais en fait, lorsque la
requête se termine, on reçoit (et heureusement) des informations du
serveur. Ces informations sont contenues dans la variable &lt;span class=&quot;CodeScriptInside&quot;&gt;xhr_object.responseText&lt;/span&gt; ou &lt;span class=&quot;CodeScriptInside&quot;&gt;xhr_object.responseXML&lt;/span&gt;,
selon que le résultat est au format texte (il est possible de mettre
n&#39;importe quoi dedans, tout est question d&#39;interprétation ultérieure de
ce résultat) ou &lt;acronym title=&quot;eXtended Markup Language&quot;&gt;XML&lt;/acronym&gt;. Remplaçons simplement l&#39;alerte de l&#39;exemple précédent par &lt;span class=&quot;CodeScriptInside&quot;&gt;alert(xhr_object.responseText)&lt;/span&gt; (cf. &lt;span class=&quot;CodeLine&quot;&gt;ligne&amp;nbsp;14&lt;/span&gt;) et voyons le résultat&amp;nbsp;:&lt;br /&gt;
&lt;div class=&quot;Centered&quot;&gt;
&lt;input class=&quot;ButtonXL&quot; onclick=&quot;request02()&quot; type=&quot;button&quot; value=&quot;Exécuter l&#39;exemple&quot; /&gt;&lt;/div&gt;
Comme vous l&#39;avez constaté, c&#39;est tout le code de la présente page &lt;acronym title=&quot;Hypertext Markup Language&quot;&gt;HTML&lt;/acronym&gt;
qui s&#39;est affiché (ça a d&#39;ailleurs dû sortir de l&#39;écran, désolé). En
fait, lors d&#39;une telle requête, tout se passe exactement comme si vous
aviez tapé l&#39;&lt;acronym title=&quot;Universal Ressouce Locator&quot;&gt;URL&lt;/acronym&gt; dans la barre d&#39;adresse de votre navigateur. Ce qui signifie que si vous demandez un fichier &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt;, il sera exécuté et c&#39;est le résultat de son exécution qui se retrouvera dans &lt;span class=&quot;CodeScriptInside&quot;&gt;xhr_object.responseText&lt;/span&gt;.
À partir de là, on se rend vite compte qu&#39;il n&#39;y a pas de limite à
l&#39;utilisation de ce type de requête. On peut simplement afficher le
résultat reçu avec un &lt;span class=&quot;CodeScriptInside&quot;&gt;alert&lt;/span&gt;. On peut mettre le résultat dans un &lt;span class=&quot;CodeScriptInside&quot;&gt;DIV&lt;/span&gt; (ou tout autre conteneur &lt;acronym title=&quot;Hypertext Markup Language&quot;&gt;HTML&lt;/acronym&gt;), mais on peut tout aussi bien récupérer et exécuter du code &lt;acronym title=&quot;JavaScript&quot;&gt;JS&lt;/acronym&gt; grâce à &lt;span class=&quot;CodeScriptInside&quot;&gt;eval&lt;/span&gt;.&lt;br /&gt;
&lt;span class=&quot;Note&quot;&gt;Note&lt;/span&gt;&amp;nbsp;: La &lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_05&quot;&gt;section&amp;nbsp;5&lt;/a&gt; présente un exemple concret d&#39;utilisation.&lt;br /&gt;
&lt;div class=&quot;Right&quot;&gt;
[&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#top&quot;&gt;haut de la page&lt;/a&gt;]&lt;/div&gt;
&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; id=&quot;section_03&quot; name=&quot;section_03&quot;&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class=&quot;Section&quot;&gt;
3. Synchrone Vs. Asynchrone&lt;/div&gt;
Dans les exemples que nous avons vus jusqu&#39;à maintenant, c&#39;est le mode &lt;b&gt;synchrone&lt;/b&gt;
qui était utilisé. Cela signifie que tant que le résultat de la requête
ne nous est pas parvenu, le script est en pause et le navigateur
bloqué. Avec un bon débit et/ou peu de données à transmettre, on
pourrait s&#39;en contenter mais cela peut vite s&#39;avérer gênant pour
l&#39;utilisateur qui voit son navigateur figé. Ce mode de transmission est
donc à proscrire. Heureusement, il existe le mode &lt;b&gt;asynchrone&lt;/b&gt;. Dans ce mode, après avoir envoyé la requête via &lt;span class=&quot;CodeScriptInside&quot;&gt;send&lt;/span&gt;,
le script poursuit son exécution, sans bloquer le navigateur.
Évidemment, dans ce mode, il faut prévoir quelque chose pour nous
prévenir quand la requête a abouti. C&#39;est le rôle de la fonction &lt;span class=&quot;CodeScriptInside&quot;&gt;onreadystatechange&lt;/span&gt; (en fait, &lt;span class=&quot;CodeScriptInside&quot;&gt;onreadystatechange&lt;/span&gt;
est une propriété et non une fonction, mais comme on lui affecte un
pointeur vers une fonction nous pouvons nous permettre cet abus de
langage). Prenons comme nouvel exemple une requête sur un simple
fichier texte&amp;nbsp;:&lt;br /&gt;
&lt;div class=&quot;Centered&quot;&gt;
&lt;input class=&quot;ButtonXL&quot; onclick=&quot;request03()&quot; type=&quot;button&quot; value=&quot;Exécuter l&#39;exemple&quot; /&gt;&lt;/div&gt;
&amp;gt; &lt;a class=&quot;Toggle&quot; href=&quot;javascript:void(0)&quot; onclick=&quot;toggleCode(&#39;02&#39;)&quot;&gt;&lt;span id=&quot;s_code_02&quot;&gt;Voir le code JavaScript&lt;/span&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div id=&quot;code_02&quot; style=&quot;display: none;&quot;&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;dp-jscript&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;tools-corner&quot;&gt;&lt;/td&gt;&lt;td class=&quot;tools&quot;&gt;&lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.ViewSource(this); return false;&quot;&gt;view plain&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.PrintSource(this); return false;&quot;&gt;print&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.About(this); return false;&quot;&gt;?&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;1&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;xhr_object&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;null&lt;/span&gt;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;2&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;3&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;commonlibs&quot;&gt;window&lt;/span&gt;.&lt;span class=&quot;builtins&quot;&gt;XMLHttpRequest&lt;/span&gt;)&amp;nbsp;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;Firefox&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;4&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xhr_object&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;XMLHttpRequest&lt;/span&gt;();&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;5&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;commonlibs&quot;&gt;window&lt;/span&gt;.&lt;span class=&quot;builtins&quot;&gt;ActiveXObject&lt;/span&gt;)&amp;nbsp;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;Internet&amp;nbsp;Explorer&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;6&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xhr_object&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;ActiveXObject&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;Microsoft.XMLHTTP&quot;&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;7&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;XMLHttpRequest&amp;nbsp;non&amp;nbsp;supporté&amp;nbsp;par&amp;nbsp;le&amp;nbsp;navigateur&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;8&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;alert&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;Votre&amp;nbsp;navigateur&amp;nbsp;ne&amp;nbsp;supporte&amp;nbsp;pas&amp;nbsp;les&amp;nbsp;objets&amp;nbsp;XMLHTTPRequest...&quot;&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;9&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;10&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;}&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;11&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;12&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;xhr_object.&lt;span class=&quot;builtins&quot;&gt;open&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;GET&quot;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;foo.txt&quot;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;true&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;13&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;14&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;xhr_object.&lt;span class=&quot;builtins&quot;&gt;onreadystatechange&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;15&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(xhr_object.&lt;span class=&quot;builtins&quot;&gt;readyState&lt;/span&gt;&amp;nbsp;==&amp;nbsp;4)&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;alert&lt;/span&gt;(xhr_object.&lt;span class=&quot;builtins&quot;&gt;responseText&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;16&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;}&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;17&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;18&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;xhr_object.&lt;span class=&quot;builtins&quot;&gt;send&lt;/span&gt;(&lt;span class=&quot;keyword&quot;&gt;null&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;textarea class=&quot;javascript&quot; name=&quot;code&quot; style=&quot;display: none;&quot;&gt;var xhr_object = null;

if(window.XMLHttpRequest) // Firefox
   xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
   xhr_object = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
else { // XMLHttpRequest non supporté par le navigateur
   alert(&quot;Votre navigateur ne supporte pas les objets XMLHTTPRequest...&quot;);
   return;
}

xhr_object.open(&quot;GET&quot;, &quot;foo.txt&quot;, true);

xhr_object.onreadystatechange = function() {
   if(xhr_object.readyState == 4) alert(xhr_object.responseText);
}

xhr_object.send(null);
&lt;/textarea&gt;
&lt;/div&gt;
&lt;br /&gt;
&amp;gt; &lt;a class=&quot;Toggle&quot; href=&quot;javascript:void(0)&quot; onclick=&quot;toggleCode(&#39;03&#39;)&quot;&gt;&lt;span id=&quot;s_code_03&quot;&gt;Voir le contenu de &lt;span class=&quot;FileName&quot;&gt;foo.txt&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;

&lt;br /&gt;
&lt;div id=&quot;code_03&quot; style=&quot;display: none;&quot;&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;dp-text&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;tools-corner&quot;&gt;&lt;/td&gt;&lt;td class=&quot;tools&quot;&gt;&lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.ViewSource(this); return false;&quot;&gt;view plain&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.PrintSource(this); return false;&quot;&gt;print&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.About(this); return false;&quot;&gt;?&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;1&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;all&quot;&gt;C&lt;/span&gt;e&lt;span class=&quot;all&quot;&gt;c&lt;/span&gt;i&lt;span class=&quot;all&quot;&gt;&amp;nbsp;&lt;/span&gt;e&lt;span class=&quot;all&quot;&gt;s&lt;/span&gt;t&lt;span class=&quot;all&quot;&gt;&amp;nbsp;&lt;/span&gt;l&lt;span class=&quot;all&quot;&gt;e&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;all&quot;&gt;c&lt;/span&gt;o&lt;span class=&quot;all&quot;&gt;n&lt;/span&gt;t&lt;span class=&quot;all&quot;&gt;e&lt;/span&gt;n&lt;span class=&quot;all&quot;&gt;u&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;all&quot;&gt;d&lt;/span&gt;u&lt;span class=&quot;all&quot;&gt;&amp;nbsp;&lt;/span&gt;f&lt;span class=&quot;all&quot;&gt;i&lt;/span&gt;c&lt;span class=&quot;all&quot;&gt;h&lt;/span&gt;i&lt;span class=&quot;all&quot;&gt;e&lt;/span&gt;r&lt;span class=&quot;all&quot;&gt;.&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;textarea class=&quot;text&quot; name=&quot;code&quot; style=&quot;display: none;&quot;&gt;Ceci est le contenu du fichier.
&lt;/textarea&gt;
&lt;/div&gt;
&lt;div class=&quot;SubSection&quot;&gt;
Comment ça marche&amp;nbsp;?&lt;/div&gt;
C&#39;est le troisième argument de la fonction &lt;span class=&quot;CodeScriptInside&quot;&gt;open&lt;/span&gt; (cf. &lt;span class=&quot;CodeLine&quot;&gt;ligne 12&lt;/span&gt;) qui spécifie que le mode doit être asynchrone.&lt;br /&gt;
L&#39;objet &lt;span class=&quot;CodeScriptInside&quot;&gt;xhr_object&lt;/span&gt; possède une propriété &lt;span class=&quot;CodeScriptInside&quot;&gt;readyState&lt;/span&gt; (cf. &lt;span class=&quot;CodeLine&quot;&gt;ligne 15&lt;/span&gt;) qui prend successivement 5 valeurs récapitulées dans le tableau suivant&amp;nbsp;:&lt;br /&gt;
&lt;div class=&quot;Centered&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--/*--&gt;&lt;![CDATA[//&gt; &lt;!--
 readyState_code.displayTable(&quot;SmallTable&quot;, [&quot;Valeur&quot;, &quot;Description&quot;]);
//--&gt;&lt;!]]&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;table class=&quot;SmallTable&quot;&gt;&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Valeur&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;0&lt;/b&gt; (&lt;i&gt;uninitialized&lt;/i&gt;)&lt;/td&gt;&lt;td&gt;non initialisé&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt; (&lt;i&gt;loading&lt;/i&gt;)&lt;/td&gt;&lt;td&gt;début du transfert des données&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt; (&lt;i&gt;loaded&lt;/i&gt;)&lt;/td&gt;&lt;td&gt;données transférées&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt; (&lt;i&gt;interactive&lt;/i&gt;)&lt;/td&gt;&lt;td&gt;les données reçues sont accssibles en partie&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;4&lt;/b&gt; (&lt;i&gt;complete&lt;/i&gt;)&lt;/td&gt;&lt;td&gt;les données sont complètement accessibles&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
Et lors de chaque changement d&#39;état de &lt;span class=&quot;CodeScriptInside&quot;&gt;readyState&lt;/span&gt;, la fonction &lt;span class=&quot;CodeScriptInside&quot;&gt;onreadystatechange&lt;/span&gt; (cf. &lt;span class=&quot;CodeLine&quot;&gt;ligne 14&lt;/span&gt;)
est appelée. On peut ainsi lui faire faire ce que l&#39;on veut en fonction
de l&#39;avancement de la requête. Mais de toute manière, c&#39;est l&#39;état &lt;b&gt;4&lt;/b&gt; qui nous intéresse et il est généralement très rapidement atteint. Il existe une autre propriété intéressante qui est &lt;span class=&quot;CodeScriptInside&quot;&gt;status&lt;/span&gt; et qui représente le code &lt;acronym title=&quot;HyperText Transfer Protocol&quot;&gt;HTTP&lt;/acronym&gt;
retourné par la requête. Il est bon de savoir que Firefox déclenche une
erreur si on tente d&#39;accéder à cette propriété avant que &lt;span class=&quot;CodeScriptInside&quot;&gt;readyState&lt;/span&gt; ne vaille &lt;b&gt;4&lt;/b&gt;. Pour voir toutes les valeurs que peut prendre &lt;span class=&quot;CodeScriptInside&quot;&gt;status&lt;/span&gt;, cliquez sur le lien suivant&amp;nbsp;:&lt;br /&gt;
&amp;gt; &lt;a class=&quot;Toggle&quot; href=&quot;javascript:void(0)&quot; onclick=&quot;toggleCode(&#39;03_bis&#39;)&quot;&gt;&lt;span id=&quot;s_code_03_bis&quot;&gt;Voir toutes les valeurs&lt;/span&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class=&quot;Centered&quot; id=&quot;code_03_bis&quot; style=&quot;display: none;&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--/*--&gt;&lt;![CDATA[//&gt; &lt;!--
 status_code.displayTable(&quot;SmallTable&quot;, [&quot;Code&quot;, &quot;Description&quot;]);
//--&gt;&lt;!]]&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;table class=&quot;SmallTable&quot;&gt;&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Code&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;Continue&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;101&lt;/td&gt;&lt;td&gt;Switching protocols&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;200&lt;/td&gt;&lt;td&gt;OK&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;201&lt;/td&gt;&lt;td&gt;Created&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;202&lt;/td&gt;&lt;td&gt;Accepted&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;203&lt;/td&gt;&lt;td&gt;Non-Authoritative Information&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;204&lt;/td&gt;&lt;td&gt;No Content&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;205&lt;/td&gt;&lt;td&gt;Reset Content&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;206&lt;/td&gt;&lt;td&gt;Partial Content&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;300&lt;/td&gt;&lt;td&gt;Multiple Choices&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;301&lt;/td&gt;&lt;td&gt;Moved Permanently&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;302&lt;/td&gt;&lt;td&gt;Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;303&lt;/td&gt;&lt;td&gt;See Other&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;304&lt;/td&gt;&lt;td&gt;Not Modified&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;305&lt;/td&gt;&lt;td&gt;Use Proxy&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;307&lt;/td&gt;&lt;td&gt;Temporary Redirect&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;400&lt;/td&gt;&lt;td&gt;Bad Request&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;401&lt;/td&gt;&lt;td&gt;Unauthorized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;402&lt;/td&gt;&lt;td&gt;Payment Required&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;403&lt;/td&gt;&lt;td&gt;Forbidden&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;404&lt;/td&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;405&lt;/td&gt;&lt;td&gt;Method Not Allowed&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;406&lt;/td&gt;&lt;td&gt;Not Acceptable&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;407&lt;/td&gt;&lt;td&gt;Proxy Authentication Required&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;408&lt;/td&gt;&lt;td&gt;Request Timeout&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;409&lt;/td&gt;&lt;td&gt;Conflict&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;410&lt;/td&gt;&lt;td&gt;Gone&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;411&lt;/td&gt;&lt;td&gt;Length Required&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;412&lt;/td&gt;&lt;td&gt;Precondition Failed&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;413&lt;/td&gt;&lt;td&gt;Request Entity Too Large&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;414&lt;/td&gt;&lt;td&gt;Request-URI Too Long&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;415&lt;/td&gt;&lt;td&gt;Unsupported Media Type&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;416&lt;/td&gt;&lt;td&gt;Requested Range Not Suitable&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;417&lt;/td&gt;&lt;td&gt;Expectation Failed&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;500&lt;/td&gt;&lt;td&gt;Internal Server Error&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;501&lt;/td&gt;&lt;td&gt;Not Implemented&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;502&lt;/td&gt;&lt;td&gt;Bad Gateway&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;503&lt;/td&gt;&lt;td&gt;Service Unavailable&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;504&lt;/td&gt;&lt;td&gt;Gateway Timeout&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;505&lt;/td&gt;&lt;td&gt;HTTP Version Not Supported&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;Right&quot;&gt;
[&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#top&quot;&gt;haut de la page&lt;/a&gt;]&lt;/div&gt;
&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; id=&quot;section_04&quot; name=&quot;section_04&quot;&gt;&lt;/a&gt;

&lt;br /&gt;
&lt;div class=&quot;Section&quot;&gt;
4. Transmettre des données&lt;/div&gt;
Réaliser une requête et recevoir un résultat, c&#39;est bien. Mais
réaliser une requête en transmettant des données c&#39;est mieux. Les
données sont transmises de la même façon que lors de la soumission d&#39;un
formulaire, c&#39;est-à-dire via l&#39;une des deux méthodes &lt;span class=&quot;CodeScriptInside&quot;&gt;get&lt;/span&gt; ou &lt;span class=&quot;CodeScriptInside&quot;&gt;post&lt;/span&gt;.
Évidemment, si on transmet des données, il faut que la requête porte
sur un fichier capable de les interpréter correctement. Dans l&#39;exemple
suivant, nous allons envoyer deux chaînes de caractères au fichier &lt;span class=&quot;FileName&quot;&gt;strings2.php&lt;/span&gt; et celui-ci va nous les retourner «&amp;nbsp;renversées&amp;nbsp;».&lt;br /&gt;
&lt;div class=&quot;Centered&quot;&gt;
&lt;form action=&quot;&quot; class=&quot;CenteredForm&quot; id=&quot;form_strings2&quot; method=&quot;&quot; name=&quot;form_strings2&quot; onsubmit=&quot;return false;&quot;&gt;
&lt;fieldset&gt;
&lt;br /&gt;
&lt;legend&gt;Entrez deux chaînes et choisissez une méthode de transmission&lt;/legend&gt;
   &lt;br /&gt;
&lt;div class=&quot;Left&quot;&gt;
Chaîne 1&amp;nbsp;: &lt;input id=&quot;string1&quot; name=&quot;string1&quot; size=&quot;10&quot; type=&quot;text&quot; /&gt; -&amp;gt; &lt;input disabled=&quot;disabled&quot; id=&quot;string1_r&quot; name=&quot;string1_c&quot; size=&quot;10&quot; type=&quot;text&quot; /&gt;&lt;br /&gt;
Chaîne 2&amp;nbsp;: &lt;input id=&quot;string2&quot; name=&quot;string2&quot; size=&quot;10&quot; type=&quot;text&quot; /&gt; -&amp;gt; &lt;input disabled=&quot;disabled&quot; id=&quot;string2_r&quot; name=&quot;string2_c&quot; size=&quot;10&quot; type=&quot;text&quot; /&gt;&lt;br /&gt;
Méthode&amp;nbsp;: &lt;input checked=&quot;checked&quot; id=&quot;method_get&quot; name=&quot;method&quot; type=&quot;radio&quot; value=&quot;GET&quot; /&gt;get &lt;input id=&quot;method_post&quot; name=&quot;method&quot; type=&quot;radio&quot; value=&quot;POST&quot; /&gt;post&lt;/div&gt;
&lt;/fieldset&gt;
&lt;input class=&quot;ButtonXL&quot; onclick=&quot;request04(this.form)&quot; type=&quot;button&quot; value=&quot;Exécuter l&#39;exemple&quot; /&gt;
 &lt;/form&gt;
&lt;/div&gt;
&amp;gt; &lt;a class=&quot;Toggle&quot; href=&quot;javascript:void(0)&quot; onclick=&quot;toggleCode(&#39;04&#39;)&quot;&gt;&lt;span id=&quot;s_code_04&quot;&gt;Voir le code JavaScript&lt;/span&gt;&lt;/a&gt;

&lt;br /&gt;
&lt;div id=&quot;code_04&quot; style=&quot;display: none;&quot;&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;dp-jscript&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;tools-corner&quot;&gt;&lt;/td&gt;&lt;td class=&quot;tools&quot;&gt;&lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.ViewSource(this); return false;&quot;&gt;view plain&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.PrintSource(this); return false;&quot;&gt;print&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.About(this); return false;&quot;&gt;?&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;1&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;xhr_object&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;null&lt;/span&gt;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;2&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;3&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;commonlibs&quot;&gt;window&lt;/span&gt;.&lt;span class=&quot;builtins&quot;&gt;XMLHttpRequest&lt;/span&gt;)&amp;nbsp;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;Firefox&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;4&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xhr_object&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;XMLHttpRequest&lt;/span&gt;();&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;5&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;commonlibs&quot;&gt;window&lt;/span&gt;.&lt;span class=&quot;builtins&quot;&gt;ActiveXObject&lt;/span&gt;)&amp;nbsp;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;Internet&amp;nbsp;Explorer&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;6&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xhr_object&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;ActiveXObject&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;Microsoft.XMLHTTP&quot;&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;7&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;XMLHttpRequest&amp;nbsp;non&amp;nbsp;supporté&amp;nbsp;par&amp;nbsp;le&amp;nbsp;navigateur&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;8&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;alert&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;Votre&amp;nbsp;navigateur&amp;nbsp;ne&amp;nbsp;supporte&amp;nbsp;pas&amp;nbsp;les&amp;nbsp;objets&amp;nbsp;XMLHTTPRequest...&quot;&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;9&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;10&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;}&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;11&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;12&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;method&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;f.elements[&lt;span class=&quot;string&quot;&gt;&quot;method&quot;&lt;/span&gt;][0].checked&amp;nbsp;?&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;GET&quot;&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;POST&quot;&lt;/span&gt;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;13&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;filename&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;strings2.php&quot;&lt;/span&gt;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;14&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;s1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;f.elements[&lt;span class=&quot;string&quot;&gt;&quot;string1&quot;&lt;/span&gt;].value;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;15&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;s2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;f.elements[&lt;span class=&quot;string&quot;&gt;&quot;string2&quot;&lt;/span&gt;].value;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;16&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;data&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;null&lt;/span&gt;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;17&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;18&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(s1&amp;nbsp;!=&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;&quot;&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;s2&amp;nbsp;!=&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;&quot;&lt;/span&gt;)&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;19&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;s1=&quot;&lt;/span&gt;+s1+&lt;span class=&quot;string&quot;&gt;&quot;&amp;amp;s2=&quot;&lt;/span&gt;+s2;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;20&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;21&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(method&amp;nbsp;==&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;GET&quot;&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;data&amp;nbsp;!=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;null&lt;/span&gt;)&amp;nbsp;{&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;22&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;filename&amp;nbsp;+=&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;?&quot;&lt;/span&gt;+data;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;23&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;null&lt;/span&gt;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;24&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;}&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;25&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;26&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;xhr_object.&lt;span class=&quot;builtins&quot;&gt;open&lt;/span&gt;(method,&amp;nbsp;filename,&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;true&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;27&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;28&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;xhr_object.&lt;span class=&quot;builtins&quot;&gt;onreadystatechange&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;29&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(xhr_object.&lt;span class=&quot;builtins&quot;&gt;readyState&lt;/span&gt;&amp;nbsp;==&amp;nbsp;4)&amp;nbsp;{&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;30&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;tmp&amp;nbsp;=&amp;nbsp;xhr_object.&lt;span class=&quot;builtins&quot;&gt;responseText&lt;/span&gt;.split(&lt;span class=&quot;string&quot;&gt;&quot;:&quot;&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;31&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;keyword&quot;&gt;typeof&lt;/span&gt;(tmp[1])&amp;nbsp;!=&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;undefined&quot;&lt;/span&gt;)&amp;nbsp;{&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;32&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.elements[&lt;span class=&quot;string&quot;&gt;&quot;string1_r&quot;&lt;/span&gt;].value&amp;nbsp;=&amp;nbsp;tmp[1];&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;33&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.elements[&lt;span class=&quot;string&quot;&gt;&quot;string2_r&quot;&lt;/span&gt;].value&amp;nbsp;=&amp;nbsp;tmp[2];&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;34&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;35&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;alert&lt;/span&gt;(tmp[0]);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;36&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;37&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;}&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;38&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;39&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(method&amp;nbsp;==&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;POST&quot;&lt;/span&gt;)&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;40&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xhr_object.&lt;span class=&quot;builtins&quot;&gt;setRequestHeader&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;Content-type&quot;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;application/x-www-form-urlencoded&quot;&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;41&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;42&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;xhr_object.&lt;span class=&quot;builtins&quot;&gt;send&lt;/span&gt;(data);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;textarea class=&quot;javascript&quot; name=&quot;code&quot; style=&quot;display: none;&quot;&gt;var xhr_object = null;

if(window.XMLHttpRequest) // Firefox
   xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
   xhr_object = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
else { // XMLHttpRequest non supporté par le navigateur
   alert(&quot;Votre navigateur ne supporte pas les objets XMLHTTPRequest...&quot;);
   return;
}

var method   = f.elements[&quot;method&quot;][0].checked ? &quot;GET&quot; : &quot;POST&quot;;
var filename = &quot;strings2.php&quot;;
var s1       = f.elements[&quot;string1&quot;].value;
var s2       = f.elements[&quot;string2&quot;].value;
var data     = null;

if(s1 != &quot;&quot; &amp;amp;&amp;amp; s2 != &quot;&quot;)
   data = &quot;s1=&quot;+s1+&quot;&amp;amp;s2=&quot;+s2;

if(method == &quot;GET&quot; &amp;amp;&amp;amp; data != null) {
   filename += &quot;?&quot;+data;
   data      = null;
}

xhr_object.open(method, filename, true);

xhr_object.onreadystatechange = function() {
   if(xhr_object.readyState == 4) {
      var tmp = xhr_object.responseText.split(&quot;:&quot;);
      if(typeof(tmp[1]) != &quot;undefined&quot;) {
         f.elements[&quot;string1_r&quot;].value = tmp[1];
         f.elements[&quot;string2_r&quot;].value = tmp[2];
      }
      alert(tmp[0]);
   }
}

if(method == &quot;POST&quot;)
   xhr_object.setRequestHeader(&quot;Content-type&quot;, &quot;application/x-www-form-urlencoded&quot;);

xhr_object.send(data);
&lt;/textarea&gt;
&lt;/div&gt;
&lt;br /&gt;
&amp;gt; &lt;a class=&quot;Toggle&quot; href=&quot;javascript:void(0)&quot; onclick=&quot;toggleCode(&#39;05&#39;)&quot;&gt;&lt;span id=&quot;s_code_05&quot;&gt;Voir le contenu de &lt;span class=&quot;FileName&quot;&gt;strings2.php&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div id=&quot;code_05&quot; style=&quot;display: none;&quot;&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;dp-c&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;tools-corner&quot;&gt;&lt;/td&gt;&lt;td class=&quot;tools&quot;&gt;&lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.ViewSource(this); return false;&quot;&gt;view plain&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.PrintSource(this); return false;&quot;&gt;print&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.About(this); return false;&quot;&gt;?&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;1&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;header(&#39;Content-type:&amp;nbsp;text/html;&amp;nbsp;charset=iso-8859-1&#39;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;2&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;3&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(count(&lt;span class=&quot;vars&quot;&gt;$_POST&lt;/span&gt;)&amp;nbsp;&amp;gt;&amp;nbsp;0)&amp;nbsp;{&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;4&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&quot;Données&amp;nbsp;reçues&amp;nbsp;en&amp;nbsp;POST:&quot;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;5&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;foreach&lt;/span&gt;(&lt;span class=&quot;vars&quot;&gt;$_POST&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;as&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;vars&quot;&gt;$v&lt;/span&gt;)&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;6&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;echo&lt;/span&gt;&amp;nbsp;strrev(utf8_decode(&lt;span class=&quot;vars&quot;&gt;$v&lt;/span&gt;)).&quot;:&quot;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;7&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;}&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;8&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;elseif&lt;/span&gt;(count(&lt;span class=&quot;vars&quot;&gt;$_GET&lt;/span&gt;)&amp;nbsp;&amp;gt;&amp;nbsp;0)&amp;nbsp;{&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;9&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&quot;Données&amp;nbsp;reçues&amp;nbsp;en&amp;nbsp;GET:&quot;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;10&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;foreach&lt;/span&gt;(&lt;span class=&quot;vars&quot;&gt;$_GET&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;as&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;vars&quot;&gt;$v&lt;/span&gt;)&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;11&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;echo&lt;/span&gt;&amp;nbsp;strrev(&lt;span class=&quot;vars&quot;&gt;$v&lt;/span&gt;).&quot;:&quot;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;12&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;}&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;13&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;14&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(count(&lt;span class=&quot;vars&quot;&gt;$_POST&lt;/span&gt;)&amp;nbsp;==&amp;nbsp;0&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;count(&lt;span class=&quot;vars&quot;&gt;$_GET&lt;/span&gt;)&amp;nbsp;==&amp;nbsp;0)&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;15&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&#39;Aucune&amp;nbsp;donnée&amp;nbsp;n\&#39;a&amp;nbsp;été&amp;nbsp;reçue&amp;nbsp;par&amp;nbsp;&quot;&#39;.basename(&lt;span class=&quot;vars&quot;&gt;$_SERVER&lt;/span&gt;[&quot;PHP_SELF&quot;]).&#39;&quot;...&#39;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;textarea class=&quot;php&quot; name=&quot;code&quot; style=&quot;display: none;&quot;&gt;header(&#39;Content-type: text/html; charset=iso-8859-1&#39;);

if(count($_POST) &amp;gt; 0) {
   echo &quot;Données reçues en POST:&quot;;
   foreach($_POST as $v)
      echo strrev(utf8_decode($v)).&quot;:&quot;;
}
elseif(count($_GET) &amp;gt; 0) {
   echo &quot;Données reçues en GET:&quot;;
   foreach($_GET as $v)
      echo strrev($v).&quot;:&quot;;
}

if(count($_POST) == 0 &amp;amp;&amp;amp; count($_GET) == 0)
 echo &#39;Aucune donnée n\&#39;a été reçue par &quot;&#39;.basename($_SERVER[&quot;PHP_SELF&quot;]).&#39;&quot;...&#39;;
&lt;/textarea&gt;
&lt;/div&gt;
&lt;div class=&quot;SubSection&quot;&gt;
Comment ça marche&amp;nbsp;?&lt;/div&gt;
Tout commence en &lt;acronym title=&quot;JavaScript&quot;&gt;JS&lt;/acronym&gt;. Si la méthode sélectionnée est &lt;span class=&quot;CodeScriptInside&quot;&gt;get&lt;/span&gt;, les données à transmettre sont concaténées à l&#39;&lt;acronym title=&quot;Universal Ressouce Locator&quot;&gt;URL&lt;/acronym&gt; (cf. &lt;span class=&quot;CodeLine&quot;&gt;lignes 21-24&lt;/span&gt;) et si la méthode est &lt;span class=&quot;CodeScriptInside&quot;&gt;post&lt;/span&gt;, elles sont envoyées via la fonction &lt;span class=&quot;CodeScriptInside&quot;&gt;send&lt;/span&gt; (cf. &lt;span class=&quot;CodeLine&quot;&gt;ligne 42&lt;/span&gt;). Dans ce dernier cas, on doit aussi préciser l&#39;encodage en spécifiant l&#39;en-tête adéquat avec &lt;span class=&quot;CodeScriptInside&quot;&gt;setRequestHeader&lt;/span&gt; (cf. &lt;span class=&quot;CodeLine&quot;&gt;ligne 40&lt;/span&gt;).&lt;br /&gt;
Ensuite, côté &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt;, les données sont reçues, quelle que soit la méthode de transmission et les chaînes sont renversées grâce à &lt;span class=&quot;CodeScriptInside&quot;&gt;strrev&lt;/span&gt; (cf. &lt;span class=&quot;CodeLine&quot;&gt;lignes 3-12&lt;/span&gt;). Les données reçues via la méthode &lt;span class=&quot;CodeScriptInside&quot;&gt;POST&lt;/span&gt; sont décodées grâce à &lt;span class=&quot;CodeScriptInside&quot;&gt;utf8_decode&lt;/span&gt; sinon les caractères accentués sont mal interprétés. La chaîne affichée par le code &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; (et retournée, donc) est de la forme &lt;span class=&quot;CodeScriptInside&quot;&gt;Données reçues en XXX:STRING1:STRING2:&lt;/span&gt; où &lt;span class=&quot;CodeScriptInside&quot;&gt;XXX&lt;/span&gt; vaut soit &lt;span class=&quot;CodeScriptInside&quot;&gt;GET&lt;/span&gt; soit &lt;span class=&quot;CodeScriptInside&quot;&gt;POST&lt;/span&gt; et où &lt;span class=&quot;CodeScriptInside&quot;&gt;STRING1&lt;/span&gt; et &lt;span class=&quot;CodeScriptInside&quot;&gt;STRING2&lt;/span&gt; sont les chaînes renversées. On précise aussi, grâce à la fonction &lt;span class=&quot;CodeScriptInside&quot;&gt;header&lt;/span&gt; le type des données qui vont être transférées depuis le serveur (ici, du texte utilisant le jeu de caractères &lt;span class=&quot;CodeScriptInside&quot;&gt;iso-8859-1&lt;/span&gt;) (cf. &lt;span class=&quot;CodeLine&quot;&gt;ligne 1&lt;/span&gt;).&lt;br /&gt;
Enfin, côté &lt;acronym title=&quot;JavaScript&quot;&gt;JS&lt;/acronym&gt;, il ne reste plus qu&#39;à séparer les données, avec &lt;span class=&quot;CodeScriptInside&quot;&gt;split&lt;/span&gt; et à mettre les chaînes dans les champs correspondants (cf. &lt;span class=&quot;CodeLine&quot;&gt;lignes 30-34&lt;/span&gt;).&lt;br /&gt;
&lt;div class=&quot;Right&quot;&gt;
[&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#top&quot;&gt;haut de la page&lt;/a&gt;]&lt;/div&gt;
&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; id=&quot;section_05&quot; name=&quot;section_05&quot;&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class=&quot;Section&quot;&gt;
5. Exemple concret d&#39;utilisation&lt;/div&gt;
Comme nous l&#39;avons vu dans les exemples précédents, nous disposons
d&#39;une grande liberté d&#39;action avec cet outil. On peut simplement
afficher le résultat de la requête dans une boîte d&#39;alerte. On peut
également l&#39;afficher dans un &lt;span class=&quot;CodeScriptInside&quot;&gt;div&lt;/span&gt; (ou tout autre élément &lt;acronym title=&quot;Hypertext Markup Language&quot;&gt;HTML&lt;/acronym&gt;). Mais on peut tout aussi bien, si la chaîne récupérée représente du code &lt;acronym title=&quot;JavaScript&quot;&gt;JS&lt;/acronym&gt;, exécuter ce code grâce à &lt;span class=&quot;CodeScriptInside&quot;&gt;eval&lt;/span&gt;.&lt;br /&gt;
Voici un exemple dans lequel une liste déroulante est peuplée en fonction du choix réalisé dans une première liste. Le code &lt;acronym title=&quot;JavaScript&quot;&gt;JS&lt;/acronym&gt; qui permet de remplir la seconde liste est généré côté serveur, suite à une requête &lt;span class=&quot;CodeScriptInside&quot;&gt;MySQL&lt;/span&gt; et simplement évalué côté client.&lt;br /&gt;
&lt;div class=&quot;Centered&quot;&gt;
&lt;form action=&quot;&quot; class=&quot;CenteredForm&quot; id=&quot;form_selects&quot; method=&quot;&quot; name=&quot;form_selects&quot; onsubmit=&quot;return false;&quot;&gt;
&lt;fieldset&gt;
&lt;br /&gt;
&lt;legend&gt;Faites un choix dans la liste de gauche&lt;br /&gt;et observez le résultat dans celle de droite&lt;/legend&gt;
   &lt;br /&gt;
&lt;div class=&quot;Left&quot;&gt;
Famille&amp;nbsp;:
   &lt;select class=&quot;ButtonL&quot; id=&quot;list1&quot; name=&quot;list1&quot; onchange=&quot;request05(this.form)&quot;&gt;
    &lt;option selected=&quot;selected&quot; value=&quot;&quot;&gt;&lt;/option&gt;

    &lt;option value=&quot;Canidés&quot;&gt;Canidés&lt;/option&gt;
    &lt;option value=&quot;Félidés&quot;&gt;Félidés&lt;/option&gt;
    &lt;option value=&quot;Équidés&quot;&gt;Équidés&lt;/option&gt;
    &lt;option value=&quot;Bovidés&quot;&gt;Bovidés&lt;/option&gt;
   &lt;/select&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;Espèces&amp;nbsp;:
   &lt;select class=&quot;ButtonL&quot; id=&quot;list2&quot; name=&quot;list2&quot;&gt;

   &lt;/select&gt;
   &lt;/div&gt;
&lt;/fieldset&gt;
&lt;/form&gt;
&lt;/div&gt;
&amp;gt; &lt;a class=&quot;Toggle&quot; href=&quot;javascript:void(0)&quot; onclick=&quot;toggleCode(&#39;06&#39;)&quot;&gt;&lt;span id=&quot;s_code_06&quot;&gt;Voir le code JavaScript&lt;/span&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div id=&quot;code_06&quot; style=&quot;display: none;&quot;&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;dp-jscript&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;tools-corner&quot;&gt;&lt;/td&gt;&lt;td class=&quot;tools&quot;&gt;&lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.ViewSource(this); return false;&quot;&gt;view plain&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.PrintSource(this); return false;&quot;&gt;print&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.About(this); return false;&quot;&gt;?&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;1&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;l1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;f.elements[&lt;span class=&quot;string&quot;&gt;&quot;list1&quot;&lt;/span&gt;];&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;2&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;l2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;f.elements[&lt;span class=&quot;string&quot;&gt;&quot;list2&quot;&lt;/span&gt;];&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;3&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;index&amp;nbsp;=&amp;nbsp;l1.selectedIndex;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;4&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(index&amp;nbsp;&amp;lt;&amp;nbsp;1)&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;5&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;l2.options.length&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;6&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;7&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;xhr_object&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;null&lt;/span&gt;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;8&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;9&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;commonlibs&quot;&gt;window&lt;/span&gt;.&lt;span class=&quot;builtins&quot;&gt;XMLHttpRequest&lt;/span&gt;)&amp;nbsp;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;Firefox&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;10&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xhr_object&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;XMLHttpRequest&lt;/span&gt;();&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;11&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;commonlibs&quot;&gt;window&lt;/span&gt;.&lt;span class=&quot;builtins&quot;&gt;ActiveXObject&lt;/span&gt;)&amp;nbsp;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;Internet&amp;nbsp;Explorer&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;12&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xhr_object&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;ActiveXObject&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;Microsoft.XMLHTTP&quot;&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;13&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;XMLHttpRequest&amp;nbsp;non&amp;nbsp;supporté&amp;nbsp;par&amp;nbsp;le&amp;nbsp;navigateur&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;14&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;builtins&quot;&gt;alert&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;Votre&amp;nbsp;navigateur&amp;nbsp;ne&amp;nbsp;supporte&amp;nbsp;pas&amp;nbsp;les&amp;nbsp;objets&amp;nbsp;XMLHTTPRequest...&quot;&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;15&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;16&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;17&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;18&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xhr_object.&lt;span class=&quot;builtins&quot;&gt;open&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;POST&quot;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;species.php&quot;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;true&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;19&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;20&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xhr_object.&lt;span class=&quot;builtins&quot;&gt;onreadystatechange&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;21&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt;(xhr_object.&lt;span class=&quot;builtins&quot;&gt;readyState&lt;/span&gt;&amp;nbsp;==&amp;nbsp;4)&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;22&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eval(xhr_object.&lt;span class=&quot;builtins&quot;&gt;responseText&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;23&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;24&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;25&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xhr_object.&lt;span class=&quot;builtins&quot;&gt;setRequestHeader&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;Content-type&quot;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;application/x-www-form-urlencoded&quot;&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;26&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;data&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;string&quot;&gt;&quot;family=&quot;&lt;/span&gt;+escape(l1.options[index].value)+&lt;span class=&quot;string&quot;&gt;&quot;&amp;amp;form=&quot;&lt;/span&gt;+f.name+&lt;span class=&quot;string&quot;&gt;&quot;&amp;amp;select=list2&quot;&lt;/span&gt;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;27&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xhr_object.&lt;span class=&quot;builtins&quot;&gt;send&lt;/span&gt;(data);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;28&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;}&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;29&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;textarea class=&quot;javascript&quot; name=&quot;code&quot; style=&quot;display: none;&quot;&gt;var l1    = f.elements[&quot;list1&quot;];
var l2    = f.elements[&quot;list2&quot;];
var index = l1.selectedIndex;
if(index &amp;lt; 1)
   l2.options.length = 0;
else {
   var xhr_object = null;
 
   if(window.XMLHttpRequest) // Firefox
      xhr_object = new XMLHttpRequest();
   else if(window.ActiveXObject) // Internet Explorer
      xhr_object = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
   else { // XMLHttpRequest non supporté par le navigateur
      alert(&quot;Votre navigateur ne supporte pas les objets XMLHTTPRequest...&quot;);
      return;
   }

   xhr_object.open(&quot;POST&quot;, &quot;species.php&quot;, true);
 
   xhr_object.onreadystatechange = function() {
      if(xhr_object.readyState == 4)
         eval(xhr_object.responseText);
   }

   xhr_object.setRequestHeader(&quot;Content-type&quot;, &quot;application/x-www-form-urlencoded&quot;);
   var data = &quot;family=&quot;+escape(l1.options[index].value)+&quot;&amp;amp;form=&quot;+f.name+&quot;&amp;amp;select=list2&quot;;
   xhr_object.send(data);
}

&lt;/textarea&gt;
&lt;/div&gt;
&lt;br /&gt;
&amp;gt; &lt;a class=&quot;Toggle&quot; href=&quot;javascript:void(0)&quot; onclick=&quot;toggleCode(&#39;07&#39;)&quot;&gt;&lt;span id=&quot;s_code_07&quot;&gt;Voir le contenu de &lt;span class=&quot;FileName&quot;&gt;species.php&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div id=&quot;code_07&quot; style=&quot;display: none;&quot;&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;dp-c&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;tools-corner&quot;&gt;&lt;/td&gt;&lt;td class=&quot;tools&quot;&gt;&lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.ViewSource(this); return false;&quot;&gt;view plain&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.PrintSource(this); return false;&quot;&gt;print&lt;/a&gt; | &lt;a href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#&quot; onclick=&quot;dp.SyntaxHighlighter.Utils.About(this); return false;&quot;&gt;?&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;1&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;header(&#39;Content-type:&amp;nbsp;text/html;&amp;nbsp;charset=iso-8859-1&#39;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;2&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;3&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;vars&quot;&gt;$mysql_db&lt;/span&gt;&amp;nbsp;=&amp;nbsp;@mysql_connect(&quot;sql.free.fr&quot;,&amp;nbsp;&quot;robloche&quot;,&amp;nbsp;&quot;********&quot;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;4&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;@mysql_select_db(&quot;robloche&quot;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;5&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;6&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;vars&quot;&gt;$query&lt;/span&gt;&amp;nbsp;&amp;nbsp;=&amp;nbsp;&quot;SELECT&amp;nbsp;`Species`&amp;nbsp;FROM&amp;nbsp;`Animals`&amp;nbsp;WHERE&amp;nbsp;`Family`&amp;nbsp;=&amp;nbsp;&#39;&quot;.&lt;span class=&quot;vars&quot;&gt;$_POST&lt;/span&gt;[&quot;family&quot;].&quot;&#39;&quot;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;7&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;vars&quot;&gt;$query&lt;/span&gt;&amp;nbsp;.=&amp;nbsp;&quot;&amp;nbsp;ORDER&amp;nbsp;BY&amp;nbsp;`Species`&quot;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;8&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;vars&quot;&gt;$result&lt;/span&gt;&amp;nbsp;=&amp;nbsp;@mysql_query(&lt;span class=&quot;vars&quot;&gt;$query&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;9&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;10&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&#39;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;o&amp;nbsp;=&amp;nbsp;null;&#39;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;11&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&#39;&lt;span class=&quot;keyword&quot;&gt;var&lt;/span&gt;&amp;nbsp;s&amp;nbsp;=&amp;nbsp;document.forms[&quot;&#39;.&lt;span class=&quot;vars&quot;&gt;$_POST&lt;/span&gt;[&quot;form&quot;].&#39;&quot;].elements[&quot;&#39;.&lt;span class=&quot;vars&quot;&gt;$_POST&lt;/span&gt;[&quot;select&quot;].&#39;&quot;];&#39;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;12&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&#39;s.options.length&amp;nbsp;=&amp;nbsp;0;&#39;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;13&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt;(&lt;span class=&quot;vars&quot;&gt;$r&lt;/span&gt;&amp;nbsp;=&amp;nbsp;mysql_fetch_array(&lt;span class=&quot;vars&quot;&gt;$result&lt;/span&gt;))&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;14&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;echo&lt;/span&gt;&amp;nbsp;&#39;s.options[s.options.length]&amp;nbsp;=&amp;nbsp;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&amp;nbsp;Option(&quot;&#39;.&lt;span class=&quot;vars&quot;&gt;$r&lt;/span&gt;[&quot;Species&quot;].&#39;&quot;);&#39;;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;15&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;16&lt;/td&gt;&lt;td class=&quot;line&quot;&gt;@mysql_close(&lt;span class=&quot;vars&quot;&gt;$mysql_db&lt;/span&gt;);&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;textarea class=&quot;php&quot; name=&quot;code&quot; style=&quot;display: none;&quot;&gt;header(&#39;Content-type: text/html; charset=iso-8859-1&#39;);

$mysql_db = @mysql_connect(&quot;sql.free.fr&quot;, &quot;robloche&quot;, &quot;********&quot;);
@mysql_select_db(&quot;robloche&quot;);

$query  = &quot;SELECT `Species` FROM `Animals` WHERE `Family` = &#39;&quot;.$_POST[&quot;family&quot;].&quot;&#39;&quot;;
$query .= &quot; ORDER BY `Species`&quot;;
$result = @mysql_query($query);

echo &#39;var o = null;&#39;;
echo &#39;var s = document.forms[&quot;&#39;.$_POST[&quot;form&quot;].&#39;&quot;].elements[&quot;&#39;.$_POST[&quot;select&quot;].&#39;&quot;];&#39;;
echo &#39;s.options.length = 0;&#39;;
while($r = mysql_fetch_array($result))
 echo &#39;s.options[s.options.length] = new Option(&quot;&#39;.$r[&quot;Species&quot;].&#39;&quot;);&#39;;

@mysql_close($mysql_db);
&lt;/textarea&gt;
&lt;/div&gt;
&lt;br /&gt;
&amp;gt; &lt;a class=&quot;Toggle&quot; href=&quot;javascript:void(0)&quot; onclick=&quot;toggleCode(&#39;08&#39;)&quot;&gt;&lt;span id=&quot;s_code_08&quot;&gt;Voir la table «&amp;nbsp;&lt;b&gt;Animals&lt;/b&gt;&amp;nbsp;»&lt;/span&gt;&lt;/a&gt;

&lt;br /&gt;
&lt;div class=&quot;Centered&quot; id=&quot;code_08&quot; style=&quot;display: none;&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--/*--&gt;&lt;![CDATA[//&gt; &lt;!--
 animals.displayTable(&quot;SmallTable&quot;, [&quot;ID&quot;, &quot;Family&quot;, &quot;Species&quot;]);
//--&gt;&lt;!]]&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;table class=&quot;SmallTable&quot;&gt;&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;ID&lt;/th&gt;&lt;th&gt;Family&lt;/th&gt;&lt;th&gt;Species&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Bovidés&lt;/td&gt;&lt;td&gt;vache&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Bovidés&lt;/td&gt;&lt;td&gt;taureau&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Bovidés&lt;/td&gt;&lt;td&gt;zébu&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Bovidés&lt;/td&gt;&lt;td&gt;buffle&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;Bovidés&lt;/td&gt;&lt;td&gt;yack&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;Canidés&lt;/td&gt;&lt;td&gt;chien&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;Canidés&lt;/td&gt;&lt;td&gt;loup&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;Canidés&lt;/td&gt;&lt;td&gt;renard&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;Canidés&lt;/td&gt;&lt;td&gt;lycaon&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;Équidés&lt;/td&gt;&lt;td&gt;âne&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;Équidés&lt;/td&gt;&lt;td&gt;cheval&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;Équidés&lt;/td&gt;&lt;td&gt;zèbre&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;Félidés&lt;/td&gt;&lt;td&gt;chat&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;Félidés&lt;/td&gt;&lt;td&gt;lynx&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;Félidés&lt;/td&gt;&lt;td&gt;puma&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;Félidés&lt;/td&gt;&lt;td&gt;tigre&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;Félidés&lt;/td&gt;&lt;td&gt;lion&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;Félidés&lt;/td&gt;&lt;td&gt;Frosty&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;SubSection&quot;&gt;
Comment ça marche&amp;nbsp;?&lt;/div&gt;
Dans cet exemple, seules les notions couvertes dans les sections 1.
à 4. sont utilisées, ainsi que quelques notions élémentaires de &lt;acronym title=&quot;JavaScript&quot;&gt;JS&lt;/acronym&gt; et de &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt;. Vous devriez donc logiquement pouvoir comprendre le code par vous-même. Si, si, j&#39;en suis sûr.&lt;br /&gt;
&lt;div class=&quot;Right&quot;&gt;
[&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#top&quot;&gt;haut de la page&lt;/a&gt;]&lt;/div&gt;
&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; id=&quot;section_06&quot; name=&quot;section_06&quot;&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class=&quot;Section&quot;&gt;
6. Propriétés et méthodes&lt;/div&gt;
Cette section n&#39;est pas exhaustive. Elle présente les propriétés et
méthodes les plus utiles, même s&#39;il est vrai que cette notion est assez
subjective. Pour une liste complète, je vous invite à consulter la MSDN
dont un lien est donné en &lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_07&quot;&gt;section&amp;nbsp;7&lt;/a&gt;.&lt;br /&gt;
&lt;div class=&quot;SubSection&quot;&gt;
Propriétés&lt;/div&gt;
&lt;ul class=&quot;Spaced&quot;&gt;
&lt;li&gt;&lt;span class=&quot;CodeScriptInside&quot;&gt;onreadystatechange&lt;/span&gt;&amp;nbsp;: Spécifie la fonction à appeler lorsque la propriété &lt;span class=&quot;CodeScriptInside&quot;&gt;readyState&lt;/span&gt; varie. &lt;b&gt;lecture&lt;/b&gt;/&lt;b&gt;écriture&lt;/b&gt;. (Cf. &lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_03&quot;&gt;section&amp;nbsp;3&lt;/a&gt; pour les valeurs)&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeScriptInside&quot;&gt;readyState&lt;/span&gt;&amp;nbsp;: Représente l&#39;état d&#39;avancement de la requête. &lt;b&gt;lecture seule&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeScriptInside&quot;&gt;responseText&lt;/span&gt;&amp;nbsp;: Chaîne de caractères contenant la réponse à la requête. &lt;b&gt;lecture seule&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeScriptInside&quot;&gt;responseXML&lt;/span&gt;&amp;nbsp;: Objet &lt;acronym title=&quot;eXtended Markup Language&quot;&gt;XML&lt;/acronym&gt; contenant la réponse à la requête. &lt;b&gt;lecture seule&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeScriptInside&quot;&gt;status&lt;/span&gt;&amp;nbsp;: Représente le code &lt;acronym title=&quot;HyperText Transfer Protocol&quot;&gt;HTTP&lt;/acronym&gt; retourné par la requête. &lt;b&gt;lecture seule&lt;/b&gt;. (Cf. &lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_03&quot;&gt;section&amp;nbsp;3&lt;/a&gt; pour les valeurs)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;SubSection&quot;&gt;
Méthodes&lt;/div&gt;
&lt;ul class=&quot;Spaced&quot;&gt;
&lt;li&gt;&lt;span class=&quot;CodeScriptInside&quot;&gt;abort()&lt;/span&gt;&amp;nbsp;: Annule la requête courante.&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeScriptInside&quot;&gt;getAllResponseHeaders()&lt;/span&gt;&amp;nbsp;: Retourne les noms et les valeurs de tous les en-têtes &lt;acronym title=&quot;HyperText Transfer Protocol&quot;&gt;HTTP&lt;/acronym&gt; sous forme d&#39;une chaîne.&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeScriptInside&quot;&gt;getResponseHeader(&lt;i&gt;headerName&lt;/i&gt;)&lt;/span&gt;&amp;nbsp;: Récupère la valeur d&#39;un certain en-tête &lt;acronym title=&quot;HyperText Transfer Protocol&quot;&gt;HTTP&lt;/acronym&gt; (&lt;i&gt;headerName&lt;/i&gt;) sous forme d&#39;une chaîne.&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeScriptInside&quot;&gt;open(&lt;i&gt;method&lt;/i&gt;, &lt;i&gt;url&lt;/i&gt;[, &lt;i&gt;asynchrone&lt;/i&gt;[, &lt;i&gt;user&lt;/i&gt;[, &lt;i&gt;password&lt;/i&gt;]]])&lt;/span&gt;&amp;nbsp;: Initialise une requête en spécifiant la méthode (&lt;i&gt;method&lt;/i&gt;), l&#39;&lt;acronym title=&quot;Universal Ressouce Locator&quot;&gt;URL&lt;/acronym&gt; (&lt;i&gt;url&lt;/i&gt;), si le mode est asynchrone (&lt;i&gt;asyncFlag&lt;/i&gt; vaut &lt;span class=&quot;CodeScriptInside&quot;&gt;true&lt;/span&gt; ou &lt;span class=&quot;CodeScriptInside&quot;&gt;false&lt;/span&gt;) et en indiquant d&#39;éventuelles informations d&#39;identification (&lt;i&gt;user&lt;/i&gt; et &lt;i&gt;password&lt;/i&gt;).&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeScriptInside&quot;&gt;send(&lt;i&gt;data&lt;/i&gt;)&lt;/span&gt;&amp;nbsp;: Envoie la requête &lt;acronym title=&quot;HyperText Transfer Protocol&quot;&gt;HTTP&lt;/acronym&gt; au serveur en transmettant éventuellement des données (&lt;i&gt;data&lt;/i&gt; doit alors être différent de &lt;span class=&quot;CodeScriptInside&quot;&gt;null&lt;/span&gt;) sous forme d&#39;une «&amp;nbsp;postable string&amp;nbsp;» (je suis preneur pour une traduction) ou sous forme d&#39;un objet &lt;acronym title=&quot;Document Object Model&quot;&gt;DOM&lt;/acronym&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeScriptInside&quot;&gt;setTimeouts(&lt;i&gt;timeout&lt;/i&gt;)&lt;/span&gt;&amp;nbsp;: Spécifie la durée maximale (&lt;i&gt;timeout&lt;/i&gt;) accordée à une requête pour quelle s&#39;effectue complètement.&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;CodeScriptInside&quot;&gt;setRequestHeader(&lt;i&gt;headerName&lt;/i&gt;, &lt;i&gt;headerValue&lt;/i&gt;)&lt;/span&gt;&amp;nbsp;: Spécifie un en-tête &lt;acronym title=&quot;HyperText Transfer Protocol&quot;&gt;HTTP&lt;/acronym&gt; (&lt;i&gt;headerName&lt;/i&gt; et &lt;i&gt;headerValue&lt;/i&gt;) à envoyer avec la requête.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;Right&quot;&gt;
[&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#top&quot;&gt;haut de la page&lt;/a&gt;]&lt;/div&gt;
&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; id=&quot;section_07&quot; name=&quot;section_07&quot;&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class=&quot;Section&quot;&gt;
7. Quelques liens&lt;/div&gt;
&lt;div class=&quot;SubSection&quot;&gt;
Des exemples d&#39;utilisation&amp;nbsp;:&lt;/div&gt;
&lt;ul class=&quot;Spaced&quot;&gt;
&lt;li&gt;Une petite page de démonstration (qui perd un peu de son sens face à ce tutorial)&amp;nbsp;:&lt;br /&gt;
 &lt;a class=&quot;Basic&quot; href=&quot;http://robloche.free.fr/javascript/js_request/test.html&quot; target=&quot;_blank&quot;&gt;http://robloche.free.fr/javascript/js_request/test.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Et
voici le concept poussé un plus loin, avec un jeu de morpion acceptant
un grand nombre de participants (enfin, deux par jeu, quand même). J&#39;ai
écrit dans ce but une classe d&#39;abstraction qui permet de manipuler ces
objets sans se soucier du navigateur. Cette classe constitue une
surcouche aux objets &lt;span class=&quot;CodeScriptInside&quot;&gt;XMLHTTPRequest&lt;/span&gt; et permet de réaliser certaines opérations complexes en ne fournissant que quelques paramètres&amp;nbsp;:&lt;br /&gt;
 &lt;a class=&quot;Basic&quot; href=&quot;http://robloche.free.fr/javascript/morpion/morpion.php&quot; target=&quot;_blank&quot;&gt;http://robloche.free.fr/javascript/morpion/morpion.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Une
nouvelle mouture de Google, actuellement en version beta, propose des
suggestions pour votre recherche, en utilisant cette technique&amp;nbsp;:&lt;br /&gt;
 &lt;a class=&quot;Basic&quot; href=&quot;http://www.google.com/webhp?complete=1&amp;amp;hl=en&quot; target=&quot;_blank&quot;&gt;http://www.google.com/webhp?complete=1&amp;amp;hl=en&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Et bien sûr, tout ceux qui ont un compte Gmail savent à quel point il est fait un usage intensif de cette technologie&amp;nbsp;:&lt;br /&gt;
 &lt;a class=&quot;Basic&quot; href=&quot;http://gmail.google.com/&quot; target=&quot;_blank&quot;&gt;http://gmail.google.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Depuis quelques mois, on voit régulièrement fleurir de nouvelles utilisations de ces requêtes &lt;acronym title=&quot;JavaScript&quot;&gt;JS&lt;/acronym&gt;
sur le net. Et ça ne risque pas de s&#39;arrêter, tant il est vrai que ça
simplifie la vie des visiteurs. Observez bien les sites que vous
fréquentez et essayez de deviner s&#39;ils utilisent cette technique.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;SubSection&quot;&gt;
D&#39;autres liens utiles&amp;nbsp;:&lt;/div&gt;
&lt;ul class=&quot;Spaced&quot;&gt;
&lt;li&gt;La page de la &lt;acronym target=&quot;_blank&quot; title=&quot;Microsoft Developer Network&quot;&gt;MSDN&lt;/acronym&gt; détaillant toutes les méthodes et propriétés des objets &lt;span class=&quot;CodeScriptInside&quot;&gt;XMLHTTPRequest&lt;/span&gt;&amp;nbsp;:&lt;br /&gt;
 &lt;a class=&quot;Basic&quot; href=&quot;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/xmobjpmeserverxmlhttp.asp&quot; target=&quot;_blank&quot;&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/xmobjpmeserverxmlhttp.asp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Un article intitulé &lt;i&gt;Dynamic HTML and XML: The XMLHttpRequest Object&lt;/i&gt; sur &lt;a class=&quot;Basic&quot; href=&quot;http://developer.apple.com/&quot; target=&quot;_blank&quot;&gt;developer.apple.com&lt;/a&gt;&amp;nbsp;:&lt;br /&gt;

 &lt;a class=&quot;Basic&quot; href=&quot;http://developer.apple.com/internet/webcontent/xmlhttpreq.html&quot; target=&quot;_blank&quot;&gt;http://developer.apple.com/internet/webcontent/xmlhttpreq.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Une page traitant également du sujet sur &lt;a class=&quot;Basic&quot; href=&quot;http://www.mozilla.org/&quot; target=&quot;_blank&quot;&gt;www.mozilla.org&lt;/a&gt;&amp;nbsp;:&lt;br /&gt;
 &lt;a class=&quot;Basic&quot; href=&quot;http://www.mozilla.org/xmlextras/&quot; target=&quot;_blank&quot;&gt;http://www.mozilla.org/xmlextras/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Un article intitulé &lt;i&gt;Using the XML HTTP Request object&lt;/i&gt; introduisant ces mêmes objets&amp;nbsp;:&lt;br /&gt;

 &lt;a class=&quot;Basic&quot; href=&quot;http://jibbering.com/2002/4/httprequest.html&quot; target=&quot;_blank&quot;&gt;http://jibbering.com/2002/4/httprequest.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Comme
vous l&#39;avez remarqué, tous les codes visibles sur cette page présentent
une coloration syntaxique bien sympatique. Celle-ci est faite en &lt;acronym title=&quot;JavaScript&quot;&gt;JS&lt;/acronym&gt; et &lt;acronym title=&quot;Cascading Style Sheet&quot;&gt;CSS&lt;/acronym&gt; grâce à un bel outil (compatible &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;/acronym&gt; et Firefox) créé par Dream Projections Inc.&amp;nbsp;:&lt;br /&gt;

 &lt;a class=&quot;Basic&quot; href=&quot;http://www.dreamprojections.com/SyntaxHighlighter/Default.aspx&quot; target=&quot;_blank&quot;&gt;http://www.dreamprojections.com/SyntaxHighlighter/Default.aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;Right&quot;&gt;
[&lt;a class=&quot;Basic&quot; href=&quot;http://www.toutjavascript.com/savoir/xmlhttprequest.php3#top&quot;&gt;haut de la page&lt;/a&gt;]&lt;/div&gt;
&lt;/div&gt;
&lt;script src=&quot;http://www.toutjavascript.com/savoir/SyntaxHighlighter.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
dp.SyntaxHighlighter.HighlightAll(&#39;code&#39;, true, true);
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/1594969436567704634/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/ajax-xmlhttprequest.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/1594969436567704634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/1594969436567704634'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/ajax-xmlhttprequest.html' title='AJAX / XMLHTTPRequest'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-1411585112842027031</id><published>2010-09-10T18:16:00.001-07:00</published><updated>2010-09-10T18:16:40.760-07:00</updated><title type='text'>Les erreurs fréquentes</title><content type='html'>Cet article est destiné à vous aider à résoudre vos problèmes de scripts.
Il se compose de 4 pages :&lt;br /&gt; 
&amp;nbsp; - La liste des erreurs courantes (cette page),&lt;br /&gt;
&amp;nbsp; - &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir10_1.php3&quot;&gt;Les réponses à apporter aux erreurs de syntaxe&lt;/a&gt;,&lt;br /&gt;
&amp;nbsp; - &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir10_2.php3&quot;&gt;Les réponses à apporter aux anomalies de fonctionnement&lt;/a&gt;,&lt;br /&gt;
&amp;nbsp; - &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir10_3.php3&quot;&gt;Une aide pour commencer le débug&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;texte&quot;&gt;



&lt;a href=&quot;&quot; name=&quot;comment&quot;&gt;&lt;/a&gt;
&lt;span class=&quot;titre2&quot;&gt;Comment débugger&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
On peut distinguer deux types d&#39;erreurs :
&lt;ul&gt;
&lt;li&gt;Les erreurs de syntaxe détectées par le navigateur,
&lt;/li&gt;
&lt;li&gt;Les erreurs qui amènent à un fonctionnement différent de celui attendu.
&lt;/li&gt;
&lt;/ul&gt;
Voici la &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir10.php3#liste&quot;&gt;liste des messages d&#39;erreur&lt;/a&gt;
les plus courants. En face de chaque message, un ou plusieurs liens
redirigent vers une explication de l&#39;origine de l&#39;erreur et vers une
correction possible.&lt;br /&gt;
&lt;br /&gt;
Une seconde liste présente les &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir10.php3#anormal&quot;&gt;fonctionnements anormaux&lt;/a&gt; des scripts et les moyens d&#39;y remédier.&lt;br /&gt;
&lt;br /&gt;



&lt;a href=&quot;&quot; name=&quot;liste&quot;&gt;&lt;/a&gt;
&lt;span class=&quot;titre2&quot;&gt;La liste des erreurs courantes&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir10_3.php3&quot;&gt;Comment repérer le message d&#39;erreur retourné par le navigateur?&lt;/a&gt;&lt;br /&gt;
Retrouvez votre message d&#39;erreur et voyez la réponse à apporter pour débugger.&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;4&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot; class=&quot;texte&quot; width=&quot;200&quot;&gt;&lt;b&gt;Libellé de l&#39;erreur&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot; class=&quot;texte&quot; width=&quot;300&quot;&gt;&lt;b&gt;Aller à&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 &#39;XXXXX&#39; est indéfini
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse(&#39;majmin&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur de majuscules/minuscules&lt;/a&gt;&lt;br /&gt;
 &lt;a href=&quot;javascript:reponse(&#39;fonction&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;XXXXX est une fonction&lt;/a&gt;&lt;br /&gt;
 &lt;a href=&quot;javascript:reponse(&#39;&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur dans la structure du script&lt;/a&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 &#39;XXXXX&#39; n&#39;est pas un objet
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse(&#39;majmin&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur de majuscules/minuscules&lt;/a&gt;&lt;br /&gt;
 &lt;a href=&quot;javascript:reponse(&#39;fonction&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;XXXXX est une fonction&lt;/a&gt;&lt;br /&gt;
 &lt;a href=&quot;javascript:reponse(&#39;&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur dans la structure du script&lt;/a&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 &#39;parent.XXXXX&#39; est indéfini&lt;br /&gt;
 &#39;top.XXXXX&#39; est indéfini&lt;br /&gt;
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse(&#39;frame&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur due à l&#39;utilisation des frames&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 Constante de chaîne non terminée
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse(&#39;carac&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur de déclaration de chaîne de caractères&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 &#39;)&#39; attendu
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse(&#39;fonction&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur d&#39;appel à une fonction&lt;/a&gt; &lt;br /&gt;
 &lt;a href=&quot;javascript:reponse(&#39;carac&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur de déclaration de chaîne de caractères&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 &#39;;&#39; attendu
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse(&#39;structure&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur de structure&lt;/a&gt;&lt;br /&gt;
 &lt;a href=&quot;javascript:reponse(&#39;carac&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur de déclaration de chaîne de caractères&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 Propriété ou méthode non gérée par cet objet
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse(&#39;objet&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur de programmation objet&lt;/a&gt;&lt;br /&gt;
 &lt;a href=&quot;javascript:reponse(&#39;compa&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Incompatibilité entre navigateurs&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 Objet attendu
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse(&#39;structure&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur de structure&lt;/a&gt;&lt;br /&gt;
 &lt;a href=&quot;javascript:reponse(&#39;ecriture&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur d&#39;écriture&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;span class=&quot;small&quot;&gt;REMARQUE : Les messages d&#39;erreur varient en
fonction du navigateur (Netscape, IE, Opera, ...) , de l&#39;environnement
(Windows, Mac, Linux, ...) et de la langue.&lt;/span&gt;
&lt;br /&gt;&lt;br /&gt;

&lt;span class=&quot;texte&quot;&gt;

&lt;a href=&quot;&quot; name=&quot;anormal&quot;&gt;&lt;/a&gt;
&lt;span class=&quot;titre2&quot;&gt;Les fonctionnements anormaux&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Un fonctionnement anormal n&#39;est pas une erreur détectée par le
navigateur, mais une erreur de conception ou d&#39;écriture qui donne des
résultats différents de ceux attendus.&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;4&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot; class=&quot;texte&quot; width=&quot;200&quot;&gt;&lt;b&gt;Anomalie de fonctionnement&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot; class=&quot;texte&quot; width=&quot;300&quot;&gt;&lt;b&gt;Aller à&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 Le résultat d&#39;un test if est incohérent
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse2(&#39;if&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur dans l&#39;écriture du test if&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 Le résultat d&#39;une fonction est incohérent
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse2(&#39;fonction&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur dans l&#39;écriture de l&#39;appel à une fonction&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 Le script ne se termine pas&lt;br /&gt;
 Boucle infinie
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse2(&#39;infini&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Erreur de déclaration de boucle&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 Les calculs mathématiques sont inexacts
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse2(&#39;calcul&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Anomalie de calcul&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 Impossible de lire un cookie
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse2(&#39;cookie&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Gestion des cookies&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;citation&quot;&gt;
 Fonctionnement différent entre local et online
&lt;/td&gt;&lt;td class=&quot;texte&quot;&gt;
 &lt;a href=&quot;javascript:reponse2(&#39;local&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Différence local / online&lt;/a&gt;&lt;br /&gt;
 &lt;a href=&quot;javascript:reponse2(&#39;cookie&#39;)&quot; onmouseover=&quot;return over()&quot;&gt;Gestion des cookies&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/span&gt;


&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/center&gt;



&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
 AffBasConseil();
//--&gt;
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/1411585112842027031/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/les-erreurs-frequentes.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/1411585112842027031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/1411585112842027031'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/les-erreurs-frequentes.html' title='Les erreurs fréquentes'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-289635058827566540</id><published>2010-09-10T18:15:00.000-07:00</published><updated>2010-09-10T18:15:22.361-07:00</updated><title type='text'>Deux exemples pour commencer</title><content type='html'>&lt;center&gt;&lt;div style=&quot;float: left; height: 260px; position: relative; width: 310px;&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
google_ad_client = &quot;pub-4954616225886678&quot;;
google_ad_width = 300;
google_ad_height = 250;
google_ad_format = &quot;300x250_as&quot;;
google_ad_type = &quot;text_image&quot;;
google_ad_channel =&quot;6156266328&quot;;
google_color_border = &quot;316AC5&quot;;
google_color_bg = &quot;EDF2F9&quot;;
google_color_link = &quot;DE8C18&quot;;
google_color_url = &quot;000099&quot;;
google_color_text = &quot;000099&quot;;
//--&gt;
&lt;/script&gt;
&lt;script src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; style=&quot;display: none;&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;/div&gt;
&lt;/center&gt;Les expressions régulières sont des objets qui
existent dans la plupart des langages de programmation, mais qui sont
mal connus, car relativement complexes.&lt;br /&gt;
Ce tutorial a pour objet de vous montrer comment les expressions régulières fonctionnent et surtout à quoi elles servent.&lt;br /&gt;
C&#39;est aussi l&#39;occasion pour moi de les apprendre une fois pour toute, car leur puissance dépasse largement leur difficulté :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;


Avant de voir comment programmer les expressions régulières, je pense qu&#39;il faut d&#39;abord voir à quoi cela peut servir !&lt;br /&gt;
Les expressions régulières permettent de réaliser des traitements sur
des chaînes de caractères, traitements qui peuvent être assez complexes
à réaliser sans l&#39;aide de ces fameuses expressions.&lt;br /&gt;
&lt;br /&gt;
&lt;script language=&quot;javascript&quot;&gt;
function SearchRegExp1(f) {
 var lemot = f.mot.value
 var exp=new RegExp(lemot,&quot;g&quot;);
 if ( exp.test(f.texte.value) ) {alert(&quot;Le mot [&quot;+lemot+&quot;] a été trouvé :)&quot;); }
 else {alert(&quot;          E R R E U R  !\n\nLe mot [&quot;+lemot+&quot;] n&#39;est pas présent !!!!&quot;); }
}
&lt;/script&gt;

&lt;span class=&quot;titre2&quot;&gt;1er exemple : Trouver des mots dans un texte&lt;/span&gt;&lt;br /&gt;
Comment savoir si un mot est présent dans un texte.
&lt;form name=&quot;ex1&quot;&gt;

Voici le texte :&lt;br /&gt;
&lt;textarea cols=&quot;70&quot; name=&quot;texte&quot; rows=&quot;5&quot;&gt;Ceci est le texte dans lequel on va rechercher un mot.
Comment ça marche ?
Continuez la lecture, je vous assure que ça vaut le coup :)&lt;/textarea&gt;&lt;br /&gt;
Mot à recherche : &lt;input name=&quot;mot&quot; type=&quot;text&quot; value=&quot;lecture&quot; /&gt;&lt;br /&gt;
&lt;input onclick=&quot;SearchRegExp1(this.form)&quot; type=&quot;button&quot; value=&quot;Rechercher&quot; /&gt;&lt;br /&gt;
&lt;/form&gt;
Voici le code correspondant :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
function SearchRegExp1(f) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;var lemot = f.mot.value&lt;br /&gt;
&amp;nbsp;&amp;nbsp;var exp=new RegExp(lemot,&quot;g&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if ( exp.test(f.texte.value) ) {alert(&quot;Le mot [&quot;+lemot+&quot;] a été trouvé :)&quot;); }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;else {alert(&quot;          E R R E U R  !\n\nLe mot [&quot;+lemot+&quot;] n&#39;est pas présent !!!!&quot;); }&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;script language=&quot;javascript&quot;&gt;
function VerifLogin(login) {
 var exp=new RegExp(&quot;^[a-zA-Z0-9]{3,8}$&quot;,&quot;g&quot;);
 if ( exp.test(login) ) {alert(&quot;Le login [&quot;+login+&quot;] est valide :)&quot;); }
 else {alert(&quot;          E R R E U R  !\n\nLe login [&quot;+login+&quot;] n&#39;est pas valide !!!!&quot;); }
}
&lt;/script&gt;

&lt;span class=&quot;titre2&quot;&gt;2ème exemple : Est-ce un login valide ? &lt;/span&gt;&lt;br /&gt;
La principale utilité des expressions régulières en javascript est de vérifier la saisie dans un formulaire.&lt;br /&gt;
Cette fonction vérifie que le login saisi est bien formaté : de 3 à 8
caractères et sans caractères spéciaux (uniquement des chiffres et des
lettres).&lt;br /&gt;
&lt;form name=&quot;ex2&quot;&gt;

Saisissez un login : &lt;input name=&quot;login&quot; type=&quot;text&quot; value=&quot;login&quot; /&gt; &lt;input onclick=&quot;VerifLogin(this.form.login.value)&quot; type=&quot;button&quot; value=&quot;Vérifier le login&quot; /&gt;&lt;br /&gt;
Saisissez un login : &lt;input name=&quot;login2&quot; type=&quot;text&quot; value=&quot;login trop long&quot; /&gt; &lt;input onclick=&quot;VerifLogin(this.form.login2.value)&quot; type=&quot;button&quot; value=&quot;Vérifier le login&quot; /&gt;
&lt;/form&gt;
Voici le code correspondant :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
function VerifLogin(login) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;var exp=new RegExp(&quot;^[a-zA-Z0-9]{3,8}$&quot;,&quot;g&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if ( exp.test(login) ) {alert(&quot;Le login [&quot;+login+&quot;] est valide :)&quot;); }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;else {alert(&quot;          E R R E U R  !\n\nLe login [&quot;+login+&quot;] n&#39;est pas valide !!!!&quot;); }&lt;br /&gt;
}&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/289635058827566540/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/deux-exemples-pour-commencer.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/289635058827566540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/289635058827566540'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/deux-exemples-pour-commencer.html' title='Deux exemples pour commencer'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-7289521319614976775</id><published>2010-09-10T18:14:00.000-07:00</published><updated>2010-09-10T18:14:27.890-07:00</updated><title type='text'>Les chaînes de caractères</title><content type='html'>Tous les langages de programmation prévoient une gestion des chaînes de
caractères. JavaScript est particulièrement adapté pour le traitement
des chaînes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;texte&quot;&gt;1 - &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir07.php3#par1&quot;&gt;La déclaration des chaînes&lt;/a&gt;&lt;br /&gt;
2 - &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir07.php3#par2&quot;&gt;Les opérations sur les chaînes&lt;/a&gt;&lt;br /&gt;
3 - &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir07.php3#par3&quot;&gt;Des exemples utiles&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/center&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;span class=&quot;texte&quot;&gt;
&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; name=&quot;par1&quot;&gt;&lt;/a&gt;
&lt;span class=&quot;titre2&quot;&gt;La déclaration des chaînes&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;La déclaration&lt;/span&gt;&lt;br /&gt;
Pour déclarer une chaîne de caractères, vous pouvez utiliser les guillemets (&quot;) ou l&#39;apostrophe (&#39;).&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine1=&quot;Bonjour&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine2=&#39;Bonjour&#39;;&lt;br /&gt;
&lt;/span&gt;
Ces deux lignes ont le même effet.&lt;br /&gt;
&lt;br /&gt;
Cela se corse quand il s&#39;agit d&#39;initialiser une chaîne avec un de ces caractères :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine1=&quot;Bonjour l&#39;ami&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine2=&#39;Je vous dis &quot;Bonjour&quot;&#39;;&lt;br /&gt;
&lt;/span&gt;
Le secret est d&#39;alterner les guillemets et les apostrophes selon les caractères spéciaux à afficher. &lt;br /&gt;
&lt;br /&gt;
Il faut veillez à ne pas fermer la chaîne de caractères avant sa fin
normale pour éviter les erreurs javascript. Exemple de déclaration
incorrecte :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine1=&quot;Je vous dis &quot;&lt;span style=&quot;color: red;&quot;&gt;Bonjour&quot;&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
^ici, le &quot; indique la fin de chaîne&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;
Il existe aussi une autre solution :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine1=&quot;Je lui dis \&quot;Bonjour l&#39;ami\&quot;&quot;;&lt;br /&gt;
&lt;/span&gt;
La variable &lt;span class=&quot;code&quot;&gt;chaine1&lt;/span&gt; contient &lt;span class=&quot;code&quot;&gt;Je lui dis &quot;Bonjour l&#39;ami&quot;&lt;/span&gt;. Javascript a interprété &lt;span class=&quot;code&quot;&gt;\&quot;&lt;/span&gt; comme un guillemet.&lt;br /&gt;
&lt;br /&gt;


&lt;span class=&quot;titre3&quot;&gt;Les types de variables javascript&lt;/span&gt;&lt;br /&gt;
Les variables javascript ne sont pas typées, c&#39;est-à-dire qu&#39;elles
n&#39;ont pas de type prédéfini (entier, chaîne, ...) comme dans les autres
langages. C&#39;est le navigateur qui interprète dynamiquement le type le
plus approprié. Par exemple :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine=&quot;azerty&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var pi=3.14159;&lt;br /&gt;
&lt;/span&gt;
La variable &lt;span class=&quot;code&quot;&gt;chaine&lt;/span&gt; est initialisée avec une chaîne de caractères.&lt;br /&gt;
La variable &lt;span class=&quot;code&quot;&gt;pi&lt;/span&gt; est initialisée avec un nombre.&lt;br /&gt;
&lt;br /&gt;
Une variable peut être transformée en une chaîne de caractères à tout
moment. Il est possible de modifier dynamiquement le type de la
variable :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine=&quot;azerty&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var pi=3.14159;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;chaine=pi;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;pi=pi+&quot;2654&quot;;&lt;br /&gt;
&lt;/span&gt;
A la fin de ce script, &lt;span class=&quot;code&quot;&gt;chaine&lt;/span&gt; est un nombre qui vaut &lt;span class=&quot;code&quot;&gt;3.14159&lt;/span&gt; ;&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;pi&lt;/span&gt; est une &lt;u&gt;chaîne&lt;/u&gt; qui contient &lt;span class=&quot;code&quot;&gt;&quot;3.14152654&quot;&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
La différence peut sembler sans importance. Il n&#39;en est rien. Quand une
variable est un nombre, il est possible de lui appliquer des opérations
(addition, multiplication, ...). Quand une variable est de type chaîne
de caractères, on peut lui appliquer les méthodes propres aux objets
chaînes.&lt;br /&gt;
JavaScript n&#39;est pas exigeant sur le type des variables, mais si vous
essayez d&#39;appliquer une méthode de traitement des chaînes à un nombre,
vous risquez une errreur.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;



&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; name=&quot;par2&quot;&gt;&lt;/a&gt;
&lt;span class=&quot;titre2&quot;&gt;Les opérations sur les chaînes&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;La concaténation&lt;/span&gt;&lt;br /&gt;
L&#39;opération de base est la &lt;span class=&quot;important&quot;&gt;concaténation&lt;/span&gt; de chaînes. Elle consiste à assembler deux chaînes en une seule. L&#39;opérateur est le &lt;span class=&quot;code&quot;&gt;+&lt;/span&gt;, à ne pas confondre avec l&#39;opérateur addition qui s&#39;applique aux nombres.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine1=&quot;Vive le &quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine2=&quot;JavaScript&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine=chaine1+chaine2;&lt;br /&gt;
&lt;/span&gt;
La variable &lt;span class=&quot;code&quot;&gt;chaine&lt;/span&gt; contient après ce script &lt;span class=&quot;code&quot;&gt;&quot;Vive le JavaScript&quot;&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
La concaténation est une opération simple et très utile.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;La longueur d&#39;une chaîne&lt;/span&gt;&lt;br /&gt;
Une chaîne de caractères en javascript est un objet &lt;span class=&quot;code&quot;&gt;string&lt;/span&gt; sur lequel s&#39;appliquent des propriétés et des méthodes. (Voir la page &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir07.php3&quot;&gt;JavaScript, langage Objet&lt;/a&gt; pour plus d&#39;informations)&lt;br /&gt;
La propriété &lt;span class=&quot;code&quot;&gt;length&lt;/span&gt; indique le nombre de caractères de la chaîne.&lt;br /&gt;
Pour une chaîne définie par &lt;span class=&quot;code&quot;&gt;var chaine=&quot;azerty&quot;;&lt;/span&gt;, &lt;span class=&quot;code&quot;&gt;chaine.length&lt;/span&gt; retourne le nombre de caractères, ici 6 caractères.&lt;br /&gt;
&lt;br /&gt;

&lt;span class=&quot;titre3&quot;&gt;Récupérer le n&lt;sup&gt;ième&lt;/sup&gt; caractère&lt;/span&gt;&lt;br /&gt;
La méthode &lt;span class=&quot;code&quot;&gt;charAt(n)&lt;/span&gt; récupère le caractère n. Attention, le premier caractère a comme indice 0.&lt;br /&gt;
Pour une chaîne initialisée par &lt;span class=&quot;code&quot;&gt;var chaine=&quot;azerty&quot;&lt;/span&gt;, &lt;span class=&quot;code&quot;&gt;chaine.charAt(1)&lt;/span&gt; retourne &lt;span class=&quot;code&quot;&gt;&quot;z&quot;&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;

&lt;span class=&quot;titre3&quot;&gt;Extraire une sous-chaîne&lt;/span&gt;&lt;br /&gt;
Il est utile de pouvoir extraire un morceau d&#39;une chaîne. Par exemple, déclarons la variable &lt;span class=&quot;code&quot;&gt;date=&quot;15/08/2000&quot;&lt;/span&gt;. La question est de récupérer le jour, le mois et l&#39;année dans 3 variables différentes.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var date  = &quot;15/08/2000&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var jour  = date.substring(0,2);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var mois  = date.substring(3,5);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var annee = date.substring(6,10);&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;form&gt;
&lt;span class=&quot;texte&quot;&gt;Après ce script, &lt;span class=&quot;code&quot;&gt;jour&lt;/span&gt; vaut &lt;span class=&quot;code&quot;&gt;15&lt;/span&gt;, &lt;span class=&quot;code&quot;&gt;mois&lt;/span&gt; vaut &lt;span class=&quot;code&quot;&gt;08&lt;/span&gt; et &lt;span class=&quot;code&quot;&gt;annee&lt;/span&gt; vaut &lt;span class=&quot;code&quot;&gt;2000&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;texte&quot;&gt;Cliquez sur ce bouton pour voir le résultat du script : &lt;input onclick=&quot;var date=&#39;15/08/2000&#39;;alert(&#39;jour=&#39;+date.substring(0,2)+&#39;\nmois=&#39;+date.substring(3,5)+&#39;\nannee=&#39;+date.substring(6,10))&quot; type=&quot;button&quot; value=&quot;date.substring...&quot; /&gt;
&lt;/span&gt;&lt;/form&gt;
&lt;span class=&quot;texte&quot;&gt;La méthode &lt;span class=&quot;code&quot;&gt;substring&lt;/span&gt; attend 2 paramètres :&lt;br /&gt;
&amp;nbsp;- l&#39;indice du premier caractère (inclus),&lt;br /&gt;
&amp;nbsp;- l&#39;indice du dernier caractère (exclus).&lt;br /&gt;
Si les deux paramètres sont inversés, javascript rétablit l&#39;ordre logique :&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;code&quot;&gt;chaine.substring(6,10)&lt;/span&gt; et &lt;span class=&quot;code&quot;&gt;chaine.substring(10,6)&lt;/span&gt; auront le même effet.&lt;br /&gt;
Si le deuxième paramètre est omis, la chaine retournée commence à l&#39;indice indiqué et se termine à la fin de la chaîne.&lt;br /&gt;
&lt;br /&gt;

&lt;span class=&quot;titre3&quot;&gt;Retrouver une sous-chaîne dans une chaîne&lt;/span&gt;&lt;br /&gt;
Deux méthodes permettent de retrouver une sous-chaîne d&#39;une chaîne. Ces
méthodes retrouvent la position d&#39;une chaîne et retourne son indice.&lt;br /&gt;
Par exemple, vous avez dans une variable javascript un nom de domaine et vous souhaitez retrouver l&#39;extension :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var domaine=&quot;www.toutjavascript.com&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var extension=domaine.substring(domaine.&lt;b&gt;lastIndexOf&lt;/b&gt;(&quot;.&quot;));&lt;br /&gt;
&lt;/span&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;form&gt;
&lt;span class=&quot;texte&quot;&gt;Voici un formulaire pour voir le résultat combiné de &lt;span class=&quot;code&quot;&gt;substring&lt;/span&gt; et &lt;span class=&quot;code&quot;&gt;lastIndexOf&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;texte&quot;&gt;&lt;input name=&quot;domaine&quot; size=&quot;20&quot; type=&quot;text&quot; value=&quot;www.toutjavascript.com&quot; /&gt;
 &lt;input onclick=&quot;alert(&#39;Extension = &#39;+this.form.domaine.value.substring(this.form.domaine.value.lastIndexOf(&#39;.&#39;)))&quot; type=&quot;button&quot; value=&quot;Extraire l&#39;extension&quot; /&gt;
&lt;/span&gt;&lt;/form&gt;
&lt;span class=&quot;texte&quot;&gt;La méthode &lt;span class=&quot;code&quot;&gt;lastIndexOf(souschaine)&lt;/span&gt; retourne l&#39;indice de la &lt;span class=&quot;important&quot;&gt;dernière&lt;/span&gt; occurrence de &lt;span class=&quot;code&quot;&gt;souschaine&lt;/span&gt;.&lt;br /&gt;
Si la sous-chaîne n&#39;est pas trouvé, &lt;span class=&quot;code&quot;&gt;lastIndexOf&lt;/span&gt; retourne -1.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Retrouver une sous-chaîne dans une chaîne, le retour&lt;/span&gt;&lt;br /&gt;
Il existe une autre méthode très proche &lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;chaine.indexOf(souschaine,debut)&lt;br /&gt;
&lt;/span&gt;
qui retourne l&#39;indice de la &lt;span class=&quot;important&quot;&gt;première&lt;/span&gt; occurrence de &lt;span class=&quot;code&quot;&gt;souschaine&lt;/span&gt; trouvée à partir du caractère &lt;span class=&quot;code&quot;&gt;debut&lt;/span&gt; de &lt;span class=&quot;code&quot;&gt;chaine&lt;/span&gt;.&lt;br /&gt;
Cette méthode permet par exemple d&#39;extraire le domaine d&#39;une url complète :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var url=&quot;http://www.toutjavascript.com/magicmenu/index.html;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var domaine=url.substring(7,url.indexOf(&quot;/&quot;,7));&lt;br /&gt;
&lt;/span&gt;
&lt;br /&gt;
La variable &lt;span class=&quot;code&quot;&gt;domaine&lt;/span&gt; contient dans cet exemple www.toutjavascript.com qui est une sous-chaine de &lt;span class=&quot;code&quot;&gt;url&lt;/span&gt; qui commence au caractère 7 et qui se termine au premier slash (/) après &quot;http://&quot;.&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;form&gt;
&lt;span class=&quot;texte&quot;&gt;Voici un formulaire pour voir le résultat combiné de &lt;span class=&quot;code&quot;&gt;substring&lt;/span&gt; et &lt;span class=&quot;code&quot;&gt;indexOf&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;texte&quot;&gt;&lt;input name=&quot;url&quot; size=&quot;40&quot; type=&quot;text&quot; value=&quot;http://www.toutjavascript.com/service/index.html&quot; /&gt;
 &lt;input onclick=&quot;alert(&#39;domaine = &#39;+this.form.url.value.substring(7,this.form.url.value.indexOf(&#39;/&#39;,7)))&quot; type=&quot;button&quot; value=&quot;Extraire le domaine&quot; /&gt;
&lt;/span&gt;&lt;/form&gt;
&lt;span class=&quot;texte&quot;&gt;&lt;span class=&quot;titre3&quot;&gt;MAJUSCULES / minuscules&lt;/span&gt;&lt;br /&gt;
JavaScript offre deux méthodes pour transformer les lettres (et uniquement les lettres) d&#39;un mot en majuscules ou en minuscules.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine=&quot;Ceci est un texte&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var maj=chaine.toUpperCase();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var min=chaine.toLowerCase();&lt;br /&gt;
&lt;/span&gt;
&lt;br /&gt;
A la fin de ce script, &lt;span class=&quot;code&quot;&gt;maj&lt;/span&gt; contient :&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;CECI EST UN TEXTE&lt;br /&gt;
et &lt;span class=&quot;code&quot;&gt;min&lt;/span&gt; contient :&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;ceci est un texte&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;form&gt;
&lt;span class=&quot;texte&quot;&gt;Vous pouvez essayer avec ce formulaire la transformation majuscule/minuscule.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;texte&quot;&gt;Essayez aussi les caractères accentués.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;texte&quot;&gt;&lt;input name=&quot;chaine&quot; type=&quot;text&quot; value=&quot;C&#39;est l&#39;été&quot; /&gt;
 &lt;input onclick=&quot;alert(&#39;Avec toUpperCase()\n  &#39;+this.form.chaine.value.toUpperCase()+&#39;\nAvec toLowerCase()\n  &#39;+this.form.chaine.value.toLowerCase())&quot; type=&quot;button&quot; value=&quot;Traiter la chaîne ...&quot; /&gt;
&lt;/span&gt;&lt;/form&gt;
&lt;span class=&quot;texte&quot;&gt;On peut penser que ces traitements sont superflus. Ils permettent en fait de rendre plus homogène une saisie.&lt;br /&gt;
Imaginez que vos visiteurs remplissent un formulaire avec leurs
coordonnées postales, certains mettront sans doute leur nom sans
majuscule, le pays en minuscules... Grâce à ces méthodes, vous pourrez
corriger leur saisie et avoir un fichier client homogène. Un exemple
complet est traité dans le paragraphe suivant.&lt;br /&gt;
&lt;br /&gt;



&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; name=&quot;par3&quot;&gt;&lt;/a&gt;
&lt;span class=&quot;titre2&quot;&gt;Quelques exemples utiles&lt;/span&gt;&lt;br /&gt;
Ce paragraphe présente des applications concrètes du traitement des chaînes de caractères.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Vérifier qu&#39;un mail est valide&lt;/span&gt;&lt;br /&gt;
Pour vérifier qu&#39;un mail est valide, il suffit de tester la présence de @ et du point.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;function verifiermail(mail) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((mail.indexOf(&quot;@&quot;)&amp;gt;=0)&amp;amp;&amp;amp;(mail.indexOf(&quot;.&quot;)&amp;gt;=0)) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&quot;Mail invalide !&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;/span&gt;
Cette fonction vérifie la présence du caractère @ et du . pour vérifier
la validité. Si ces 2 caractères sont trouvés, la fonction retourne &lt;span class=&quot;code&quot;&gt;true&lt;/span&gt; sinon, elle affiche un message et retourne &lt;span class=&quot;code&quot;&gt;false&lt;/span&gt;.
&lt;script language=&quot;javascript&quot;&gt;
function verifiermail(mail) {
 if ((mail.indexOf(&quot;@&quot;)&gt;=0)&amp;&amp;(mail.indexOf(&quot;.&quot;)&gt;=0)) {
  return true 
 } else {
  alert(&quot;Mail invalide !&quot;);
  return false
 }
}
&lt;/script&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;form&gt;
&lt;span class=&quot;texte&quot;&gt;Entrez une adresse mail
 &lt;input name=&quot;mail&quot; type=&quot;texte&quot; value=&quot;adresse mail&quot; /&gt;
 &lt;input onclick=&quot;alert(&#39;La fonction a retourné : &#39;+verifiermail(this.form.mail.value))&quot; type=&quot;button&quot; value=&quot;Vérifier le mail&quot; /&gt;
&lt;/span&gt;&lt;/form&gt;
&lt;span class=&quot;texte&quot;&gt;&lt;span class=&quot;titre3&quot;&gt;Les noms propres&lt;/span&gt;&lt;br /&gt;
Voici une fonction qui ajoute une majuscule à la première lettre d&#39;un mot.&lt;br /&gt;
Par exemple pierre, Pierre ou PIERRE  deviennent Pierre.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;function nompropre(mot) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var m=mot.charAt(0).toUpperCase() +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mot.substring(1).toLowerCase();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return m;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;/span&gt;
Dans cette fonction, on récupère le premier caractère pour le mettre en
majuscule et on lui ajoute le reste du mot forcé en minuscules.
&lt;script language=&quot;javascript&quot;&gt;
function nompropre(mot) {
 var m=mot.charAt(0).toUpperCase() + mot.substring(1).toLowerCase();
 return m;
}
&lt;/script&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;form&gt;
&lt;span class=&quot;texte&quot;&gt;Essayez grâce à ce formulaire :
 &lt;input name=&quot;mot&quot; size=&quot;15&quot; type=&quot;text&quot; value=&quot;pierre&quot; /&gt;
 &lt;input onclick=&quot;alert(nompropre(this.form.mot.value))&quot; type=&quot;button&quot; value=&quot;Nom Propre&quot; /&gt;
&lt;/span&gt;&lt;/form&gt;
&lt;span class=&quot;texte&quot;&gt;&lt;span class=&quot;titre3&quot;&gt;Remplacer toutes les occurrences d&#39;une sous-chaîne&lt;/span&gt;&lt;br /&gt;
Cette fonction recherche dans une chaîne &lt;span class=&quot;code&quot;&gt;expr&lt;/span&gt; toutes les occurrences d&#39;une sous-chaîne &lt;span class=&quot;code&quot;&gt;a&lt;/span&gt; et les remplace par une sous-chaîne &lt;span class=&quot;code&quot;&gt;b&lt;/span&gt;.&lt;br /&gt;
Ce script fonctionne pour toutes les versions de navigateurs au-delà de 3.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;function Remplace(expr,a,b) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var i=0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (i!=-1) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i=expr.indexOf(a,i);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (i&amp;gt;=0) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;expr=expr.substring(0,i)+b+expr.substring(i+a.length);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i+=b.length;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return expr&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;/span&gt;
&lt;script language=&quot;javascript&quot;&gt;
   function Remplace(expr,a,b) {
      var i=0
      while (i!=-1) {
         i=expr.indexOf(a,i);
         if (i&gt;=0) {
            expr=expr.substring(0,i)+b+expr.substring(i+a.length);
            i+=b.length;
         }
      }
      return expr
   }
&lt;/script&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;form name=&quot;fremplace&quot;&gt;
&lt;span class=&quot;texte&quot;&gt;Ici, on remplace &quot;js&quot; par &quot;JavaScript&quot; :&lt;input name=&quot;expr&quot; size=&quot;30&quot; type=&quot;text&quot; value=&quot;Sur Tout js.com, du js à gogo !&quot; /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;texte&quot;&gt;&lt;input onclick=&quot;alert(Remplace(this.form.expr.value,&#39;js&#39;,&#39;JavaScript&#39;))&quot; type=&quot;button&quot; value=&quot;Remplacer&quot; /&gt;
&lt;/span&gt;&lt;/form&gt;
&lt;span class=&quot;texte&quot;&gt;&lt;span class=&quot;titre3&quot;&gt;&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/7289521319614976775/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/les-chaines-de-caracteres.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/7289521319614976775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/7289521319614976775'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/les-chaines-de-caracteres.html' title='Les chaînes de caractères'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-8900828939628539452</id><published>2010-09-10T18:12:00.001-07:00</published><updated>2010-09-10T18:12:42.815-07:00</updated><title type='text'>Les fonctions mathématiques</title><content type='html'>avaScript est tout à fait adapté pour les calculs sur le poste du
visiteur, de nombreuses fonctions mathématiques ont été implémentées.&lt;br /&gt;
Voici le sommaire de cette page.

&lt;br /&gt;
&lt;center&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;texte&quot;&gt;
1 - &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir08.php3#par1&quot;&gt;La conversion de chaînes en nombres&lt;/a&gt;&lt;br /&gt;
2 - &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir08.php3#par2&quot;&gt;L&#39;objet JavaScript Math&lt;/a&gt;&lt;br /&gt;
3 - &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir08.php3#par3&quot;&gt;Des exemples utiles&lt;/a&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/center&gt;
&lt;hr /&gt;



&lt;a href=&quot;&quot; name=&quot;par1&quot;&gt;&lt;/a&gt;
&lt;span class=&quot;titre2&quot;&gt;La conversion de chaînes de caractères en nombres&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Les fonctions de conversion&lt;/span&gt;&lt;br /&gt;
Une précédente page décrit en détail tous &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir07.php3&quot;&gt;les traitements sur les chaînes de caractères&lt;/a&gt;.&lt;br /&gt;
En JavaScript, les variables ne sont pas typées, mais il est utile de
savoir transformer une chaîne en un entier ou un réel (nombre à
virgule).&lt;br /&gt;
Imaginons ce script :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine=&quot;3.14&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var entier=&lt;b&gt;parseInt&lt;/b&gt;(chaine);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var reel=&lt;b&gt;parseFloat&lt;/b&gt;(chaine);&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
A l&#39;issue de ce script, &lt;span class=&quot;code&quot;&gt;entier&lt;/span&gt; contient &lt;span class=&quot;code&quot;&gt;3&lt;/span&gt; et &lt;span class=&quot;code&quot;&gt;reel&lt;/span&gt; contient &lt;span class=&quot;code&quot;&gt;3.14&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;


&lt;span class=&quot;titre3&quot;&gt;Est-ce un nombre ?&lt;/span&gt;&lt;br /&gt;
Supposons maintenant que la variable &lt;span class=&quot;code&quot;&gt;chaine&lt;/span&gt; soit initialisée avec &lt;span class=&quot;code&quot;&gt;&quot;azerty&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var chaine=&quot;azerty&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var entier=&lt;b&gt;parseInt&lt;/b&gt;(chaine);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var reel=&lt;b&gt;parseFloat&lt;/b&gt;(chaine);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;var rate=&lt;b&gt;isNaN&lt;/b&gt;(entier);&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
A l&#39;issue du script, &lt;span class=&quot;code&quot;&gt;entier&lt;/span&gt; et &lt;span class=&quot;code&quot;&gt;reel&lt;/span&gt; contiennent &lt;span class=&quot;code&quot;&gt;NaN&lt;/span&gt;, car &lt;span class=&quot;code&quot;&gt;&quot;azerty&quot;&lt;/span&gt; ne peut pas se convertir en nombre.&lt;br /&gt;

Pour détecter que &lt;span class=&quot;code&quot;&gt;chaine&lt;/span&gt; a bien le format d&#39;un nombre, il existe une fonction &lt;span class=&quot;code&quot;&gt;isNaN(valeur)&lt;/span&gt; qui renvoie :&lt;br /&gt;
&amp;nbsp; - &lt;span class=&quot;code&quot;&gt;true&amp;nbsp;&lt;/span&gt; si &lt;span class=&quot;code&quot;&gt;valeur&lt;/span&gt; n&#39;est pas un nombre&lt;br /&gt;
&amp;nbsp; - &lt;span class=&quot;code&quot;&gt;false&lt;/span&gt; si &lt;span class=&quot;code&quot;&gt;valeur&lt;/span&gt; est un nombre&lt;br /&gt;
Dans ce cas, &lt;span class=&quot;code&quot;&gt;rate&lt;/span&gt; est à vrai car la conversion a échoué.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;ATTENTION, &lt;span class=&quot;code&quot;&gt;isNaN(valeur)&lt;/span&gt; retourne vrai si &lt;span class=&quot;code&quot;&gt;valeur&lt;/span&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;N&#39;est PAS&lt;/b&gt; un nombre&lt;/i&gt;


&lt;script language=&quot;javascript&quot;&gt;
 function Convertir(formulaire) {
  formulaire.entier.value=parseInt(formulaire.chaine.value);
  formulaire.nanentier.value=isNaN(parseInt(formulaire.chaine.value));
  formulaire.reel.value=parseFloat(formulaire.chaine.value);
  formulaire.nanreel.value=isNaN(parseFloat(formulaire.chaine.value));
 }
&lt;/script&gt;
&lt;form name=&quot;fchaine&quot;&gt;

&lt;span class=&quot;titre3&quot;&gt;Pour bien comprendre&lt;/span&gt;&lt;br /&gt;
 Vous pouvez tester ces fonctions grâce à ce formulaire (essayez avec un nombre et avec une chaîne comme &quot;azerty&quot;) :&lt;br /&gt;
 &lt;span class=&quot;code&quot;&gt;chaine&lt;/span&gt; contient &lt;input name=&quot;chaine&quot; size=&quot;12&quot; type=&quot;text&quot; value=&quot;3.14&quot; /&gt;
 &lt;input onclick=&quot;Convertir(this.form)&quot; type=&quot;button&quot; value=&quot;Convertir&quot; /&gt;&lt;br /&gt;
 &lt;span class=&quot;code&quot;&gt;entier&lt;/span&gt; contient &lt;input name=&quot;entier&quot; size=&quot;12&quot; type=&quot;text&quot; /&gt;
 &lt;span class=&quot;code&quot;&gt;isNaN(entier)=&lt;/span&gt; &lt;input name=&quot;nanentier&quot; size=&quot;5&quot; type=&quot;text&quot; /&gt;&lt;br /&gt;
 &lt;span class=&quot;code&quot;&gt;reel&amp;nbsp;&amp;nbsp;&lt;/span&gt; contient &lt;input name=&quot;reel&quot; size=&quot;12&quot; type=&quot;text&quot; /&gt;
 &lt;span class=&quot;code&quot;&gt;isNaN(reel)&amp;nbsp;&amp;nbsp;=&lt;/span&gt; &lt;input name=&quot;nanreel&quot; size=&quot;5&quot; type=&quot;text&quot; /&gt;&lt;br /&gt; 
&lt;/form&gt;
&lt;br /&gt;
Ces trois fonctions (attention aux majuscules) sont très utiles pour
manipuler des variables en étant sur d&#39;avoir affaire à des nombres.
Cela permet par exemple de convertir une saisie dans un formulaire et
de vérifier que le visiteur a bien entré un nombre (prix, quantité,
âge, année, ...)&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;


&lt;a href=&quot;&quot; name=&quot;par2&quot;&gt;&lt;/a&gt;
&lt;span class=&quot;titre2&quot;&gt;L&#39;objet JavaScript Math&lt;/span&gt;&lt;br /&gt;
En JavaScript, la plupart des fonctions mathématiques sont des méthodes de l&#39;objet &lt;span class=&quot;code&quot;&gt;Math&lt;/span&gt;. (Voir la page &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir01.php3&quot;&gt;JavaScript, langage Objet&lt;/a&gt; pour plus de détail sur la programmation Objet)&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Un exemple&lt;/span&gt;&lt;br /&gt;
Voici sûrement la fonction la plus utilisée, la génération d&#39;un nombre aléatoire.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
 var nb=Math.random();&lt;br /&gt;
&lt;/span&gt;
La méthode &lt;span class=&quot;code&quot;&gt;random()&lt;/span&gt; est appliquée à l&#39;objet &lt;span class=&quot;code&quot;&gt;Math&lt;/span&gt; et retourne un nombre compris entre 0 et 1.
&lt;form name=&quot;frandom&quot;&gt;

 &lt;input onclick=&quot;this.form.nb.value=Math.random()&quot; type=&quot;button&quot; value=&quot;Math.random()&quot; /&gt; 
 &lt;input name=&quot;nb&quot; type=&quot;text&quot; /&gt;
&lt;/form&gt;
Toutes les autres fonctions mathématiques sont appelées sur le même principe.&lt;br /&gt;
&lt;br /&gt;

&lt;span class=&quot;titre3&quot;&gt;Les fonctions de base&lt;/span&gt;&lt;br /&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.abs(a)&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne la valeur absolue de a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.round(a)&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne l&#39;entier arrondi le plus proche de a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.ceil(a)&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne l&#39;entier immédiatement supérieur (ou égal) à a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.floor(a)&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne l&#39;entier immédiatement inférieur (ou égal) à a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.sqrt(a)&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne la racine carrée de a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.log(a)&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne le logarithme de a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.ln(a)&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne le logarithme népérien de a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.exp(a)&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne l&#39;exponentielle de a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.pow(a,b)&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne a à la puissance b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.min(a,b)&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne le plus petit des paramètres a ou b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.max(a,b)&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne le plus grand des paramètres a ou b&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;span class=&quot;titre3&quot;&gt;Les fonctions trigonométriques&lt;/span&gt;&lt;br /&gt;
Réservées aux initiés !&lt;br /&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.cos()&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne le cosinus d&#39;un angle en radians&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.sin()&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne le sinus d&#39;un angle en radians&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.tan()&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne la tangente d&#39;un angle en radians&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.acos()&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne l&#39;arc cosinus en radians&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.asin()&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne l&#39;arc sinus en radians&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;code&quot; width=&quot;150&quot;&gt;Math.atan()&lt;/td&gt;
&lt;td class=&quot;texte&quot;&gt;Retourne l&#39;arc tangente en radians&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;


&lt;a href=&quot;&quot; name=&quot;par3&quot;&gt;&lt;/a&gt;
&lt;span class=&quot;titre2&quot;&gt;Des exemples utiles&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Générer un nombre aléatoire entier entre 1 et N&lt;/span&gt;&lt;br /&gt;
Imaginons le lancer de trois dés à 6 faces :
&lt;script language=&quot;javascript&quot;&gt;
 function aleatoire(N) {
  return (Math.floor((N)*Math.random()+1));
 }
&lt;/script&gt;
&lt;form name=&quot;de&quot;&gt;

 &lt;input onclick=&quot;this.form.face1.value=aleatoire(6);this.form.face2.value=aleatoire(6);this.form.face3.value=aleatoire(6)&quot; type=&quot;button&quot; value=&quot;Lancer les dés&quot; /&gt;
 &lt;input name=&quot;face1&quot; size=&quot;3&quot; type=&quot;texte&quot; /&gt; - 
 &lt;input name=&quot;face2&quot; size=&quot;3&quot; type=&quot;texte&quot; /&gt; - 
 &lt;input name=&quot;face3&quot; size=&quot;3&quot; type=&quot;texte&quot; /&gt;
&lt;/form&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;function aleatoire(N) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (Math.floor((N)*Math.random()+1));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
La fonction retourne un nombre aléatoire entier entre 1 et N&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Une horloge dynamique à aiguilles&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;small&quot;&gt;REMARQUES :&lt;br /&gt;
Ce paragraphe s&#39;appelle &lt;b&gt;Exemples utiles&lt;/b&gt; :) &lt;br /&gt;
Donc, vous n&#39;y trouverez pas les scripts de calcul d&#39;aires de triangles, cercles, losanges... &lt;br /&gt;
Ni les jeux sans intérêt &quot;plus petit-plus grand&quot;, &quot;devine un nombre&quot;, etc...&lt;br /&gt;
&lt;/span&gt;
&lt;br /&gt;
Une horloge à aiguilles, ca peut être marrant, non ? Et en plus, c&#39;est très bon pour revoir la trigonométrie.&lt;br /&gt;
&lt;a href=&quot;http://www.toutjavascript.com/main/gorun.php3?s=aiguille&quot; target=&quot;_blank&quot;&gt;Télécharger le script&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;

&lt;span class=&quot;titre3&quot;&gt;Un convertisseur francs-euros&lt;/span&gt;&lt;br /&gt;
Saisissez des francs ou des euros et cliquez sur &quot;Convertir&quot;&lt;br /&gt;
Utile pour les sites de commerce en ligne...&lt;br /&gt;
&lt;script language=&quot;JavaScript&quot;&gt;
//D&#39;autres scripts sur http://www.toutjavascript.com
//Si vous utilisez ce script, merci de m&#39;avertir !  &lt; &lt;voir adresse mail sur site&gt; &gt;
var taux=6.55957; var lequel=&quot;&quot;;
function convF(f) {
 var E=Math.round(100*parseFloat(f.franc.value)/taux)/100;
 if (isNaN(E)) { 
  alert(&quot;Montant incorrect&quot;); f.franc.focus();
 } else {
  f.euro.value=E;
 }
}
function convE(f) {
 var F=Math.round(100*parseFloat(f.euro.value)*taux)/100;
 if (isNaN(F)) { 
  alert(&quot;Montant incorrect&quot;); f.euro.focus();
 } else {
  f.franc.value=F;
 }
}
&lt;/script&gt;
&lt;form name=&quot;feuro&quot;&gt;

&lt;input name=&quot;franc&quot; onblur=&quot;convF(this.form)&quot; size=&quot;10&quot; type=&quot;text&quot; value=&quot;0&quot; /&gt; FF 
&lt;input type=&quot;button&quot; value=&quot;&amp;lt; Convertir &amp;gt; &quot; /&gt; 
&lt;input name=&quot;euro&quot; onblur=&quot;convE(this.form)&quot; size=&quot;10&quot; type=&quot;text&quot; value=&quot;0&quot; /&gt; Euros
&lt;/form&gt;
&lt;a href=&quot;http://www.toutjavascript.com/main/gorun.php3?s=conveuro&quot; target=&quot;_blank&quot;&gt;Télécharger le script&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/8900828939628539452/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/les-fonctions-mathematiques.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/8900828939628539452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/8900828939628539452'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/les-fonctions-mathematiques.html' title='Les fonctions mathématiques'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-7441948585633322348</id><published>2010-09-10T18:11:00.001-07:00</published><updated>2010-09-10T18:11:29.065-07:00</updated><title type='text'>Javascript et les Frames</title><content type='html'>Les frames sont de plus en plus rejetées par le monde de l&#39;internet.
La plupart des grands sites les ont abandonnées et ont choisi de
recopier sur chaque page le menu et tous les liens de leur navigation.
Nous allons tout de même aborder la mise en place des frames et surtout
leur intérêt dans la programmation JavaScript.&lt;br /&gt;&lt;br /&gt;

&lt;span class=&quot;titre2&quot;&gt;1 - Comment intégrer des frames ? &lt;/span&gt;&lt;br /&gt;

&lt;br /&gt;
Pour créer une page séparée en plusieurs frames, il faut à
l&#39;origine une page principale qui remplace la zone BODY par la
déclaration et le positionnement des frames.&lt;br /&gt;

La structure classique d&#39;une page découpée en frames est celle-ci.
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt;&amp;lt;HTML&amp;gt;
&amp;lt;HEAD&amp;gt;
&amp;lt;TITLE&amp;gt;Titre de page&amp;lt;/TITLE&amp;gt;
&amp;lt;/HEAD&amp;gt;

&amp;lt;FRAMESET cols=&quot;140,*&quot;&amp;gt;
 &amp;lt;FRAMESET rows=&quot;*,50&quot; frameborder=0&amp;gt;
  &amp;lt;FRAME name=&quot;FRAME1&quot; src=&quot;frame1.html&quot;&amp;gt;
  &amp;lt;FRAME name=&quot;FRAME2&quot; src=&quot;frame2.html&quot;&amp;gt;
 &amp;lt;/FRAMESET&amp;gt;
 &amp;lt;FRAME name=&quot;FRAME3&quot; src=&quot;frame3.html&quot;&amp;gt;
&amp;lt;/FRAMESET&amp;gt;&lt;/pre&gt;
&lt;/span&gt;

Cette déclaration crée une page découpée de la sorte :&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
 &lt;td align=&quot;center&quot; width=&quot;50&quot;&gt;FRAME 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/td&gt;
 &lt;td align=&quot;center&quot; rowspan=&quot;2&quot; width=&quot;300&quot;&gt;FRAME 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td align=&quot;center&quot;&gt;FRAME 2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;Nous n&#39;allons pas voir en détail comment créer des frames,
c&#39;est là du langage HTML et la documentation est riche dans ce domaine.
&lt;br /&gt;&lt;br /&gt;
&lt;span class=&quot;titre2&quot;&gt;2 - Le JavaScript dans les frames&lt;/span&gt;&lt;br /&gt;
La &lt;b&gt;première application&lt;/b&gt;
qui vient à l&#39;esprit avec les frames est la création de menu. C&#39;est en
effet la principale utilité des frames - nous verrons qu&#39;il y en a
d&#39;autres.&lt;br /&gt;
En HTML, pour créer un lien qui charge une page dans une frame, il faut écrire :
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt; &amp;lt;A HREF=&quot;page.html&quot; target=&quot;nom_frame&quot;&amp;gt;Le Lien&amp;lt;/A&amp;gt;&lt;/pre&gt;
&lt;/span&gt;
Dans la balise A, &lt;span class=&quot;motcle&quot;&gt;target&lt;/span&gt; contient le nom de la frame à charger avec le fichier (ici &lt;span class=&quot;code&quot;&gt;page.html&lt;/span&gt;).&lt;br /&gt;
En JavaScript, pour charger une page dans une frame, on utilise une des instructions suivantes :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt; parent.frames[nu_frame].window.location=&quot;page.html&quot;&lt;/pre&gt;
&lt;/span&gt;
Ici, on fait appel au tableau &lt;span class=&quot;code&quot;&gt;frames&lt;/span&gt; indicé par &lt;span class=&quot;code&quot;&gt;nu_frame&lt;/span&gt;. Ici la frame numéro &lt;span class=&quot;code&quot;&gt;nu_frame&lt;/span&gt; contient &lt;span class=&quot;code&quot;&gt;page.html&lt;/span&gt;.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt; parent.frames[&quot;frame1&quot;].window.location=&quot;page.html&quot;&lt;/pre&gt;
&lt;/span&gt;
Maintenant, on accède au tableau des frames par son nom. Le résultat est identique avec l&#39;instruction suivante :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt; parent.frame1.window.location=&quot;page.html&quot;&lt;/pre&gt;
&lt;/span&gt;
Si vous souhaitez charger 2 pages dans 2 frames différentes avec 1 seul clic, JavaScript le permet.&lt;br /&gt;
On commence par déclarer une fonction &lt;span class=&quot;code&quot;&gt;charger&lt;/span&gt; avec en paramètre les noms des pages à charger dans les 2 frames :
&lt;span class=&quot;code&quot;&gt;
&lt;pre&gt; function charger(nom_page1,nom_page2) {
  parent.frames[&quot;frame1&quot;].window.location=nom_page1;
  parent.frames[&quot;frame2&quot;].window.location=nom_page2;
 }&lt;/pre&gt;
&lt;/span&gt;
On suppose dans cet exemple que les frames s&#39;appellent &lt;span class=&quot;code&quot;&gt;frame1&lt;/span&gt; et &lt;span class=&quot;code&quot;&gt;frame2&lt;/span&gt;.&lt;br /&gt;
On crée ensuite un lien qui appelle la fonction JavaScript &lt;span class=&quot;code&quot;&gt;charger&lt;/span&gt; :
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt; &amp;lt;A HREF=&quot;JavaScript:charger(&#39;page1.html&#39;,&#39;page2.html&#39;)&quot;&amp;gt;1 Clic et 2 pages chargées&amp;lt;/A&amp;gt;&lt;/pre&gt;
&lt;/span&gt;
&lt;br /&gt;&lt;br /&gt;
La &lt;b&gt;seconde application&lt;/b&gt; est la sauvegarde
d&#39;informations tout au long d&#39;une session de navigation. Les frames
remplacent avantageusement les cookies s&#39;il s&#39;agit de stocker des
informations juste pendant la navigation du visiteur.
Les informations stockées sont perdues dès que le visiteur ferme son
navigateur ou s&#39;il remplace votre page par une autre.&lt;br /&gt;
Pour stocker des informations, il suffit de déclarer une variable dans
l&#39;entête de la fenêtre mère (celle qui contient la déclaration des
frames grâce aux balises &lt;span class=&quot;motcle&quot;&gt;&amp;lt;FRAMESET&amp;gt;&lt;/span&gt;). Cette variable peut être juste une valeur (nombre, chaîne, ...) ou un objet complexe.&lt;br /&gt;&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Exemple de stockage de l&#39;heure d&#39;ouverture de la session&lt;/span&gt;&lt;br /&gt;
Dans l&#39;entête (entre les balises &amp;lt;HEAD&amp;gt; et &amp;lt;/HEAD&amp;gt;) de la fenêtre parent, on déclare :
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt; &amp;lt;SCRIPT language=&quot;javascript&quot;&amp;gt;
  var heure=new Date();
  heure=date.getTime() // transformation de la date en millisecondes
 &amp;lt;/SCRIPT&amp;gt;&lt;/pre&gt;
&lt;/span&gt;
&lt;small&gt;Rappel : la fenêtre &lt;span class=&quot;code&quot;&gt;parent&lt;/span&gt; est celle qui contient la déclaration des frames&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;

Dans la &lt;span class=&quot;code&quot;&gt;frame1&lt;/span&gt;, on a accès à cette variable en codant :
&lt;span class=&quot;code&quot;&gt;
&lt;pre&gt; &amp;lt;SCRIPT language=&quot;javascript&quot;&amp;gt;
  var h=parent.heure;
 &amp;lt;SCRIPT&amp;gt;&lt;/pre&gt;
&lt;/span&gt;
&lt;br /&gt;&lt;br /&gt;
Cette possibilité peut être étendue aux fonctions. De la même façon que
la fenêtre parente peut sauver des variables, il est possible de coder
des fonctions dans son entête et de les récupérer ensuite dans toutes
les frames.&lt;br /&gt;&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Exemple de déclaration d&#39;une fonction dans la page parente&lt;/span&gt;&lt;br /&gt;
On souhaite utiliser dans toutes les frames une fonction qui affiche une ligne de copyright.&lt;br /&gt;
On commence par déclarer dans l&#39;entête de la fenêtre parente la fonction &lt;span class=&quot;code&quot;&gt;AffCopyright()&lt;/span&gt;.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt; &amp;lt;SCRIPT language=&quot;javascript&quot;&amp;gt;
 function AffCopyright() {
  document.write(&quot;&amp;lt;CENTER&amp;gt;Copyright 2000 - Tous droits réservés&amp;lt;/CENTER&amp;gt;&quot;); 
 }
 &amp;lt;SCRIPT&amp;gt;&lt;/pre&gt;
&lt;/span&gt;
Dans toutes les frames du site, il suffit, pour afficher cette note de copyright, d&#39;appeler la fonction ainsi :
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt; &amp;lt;SCRIPT language=&quot;javascript&quot;&amp;gt;parent.AffCopyright()&amp;lt;SCRIPT&amp;gt;&lt;/pre&gt;
&lt;/span&gt;
L&#39;intérêt est évidemment la facilité de mise à jour sur toutes les
pages du site de cette note de copyright. Il suffit de changer la
fonction dans la page &lt;span class=&quot;code&quot;&gt;parent&lt;/span&gt; et les modifications se reportent automatiquement dans toutes les pages du site où la fonction est intégrée.
&lt;br /&gt;
&lt;br /&gt;
Les frames sont très utiles dans la conception de sites :
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Elles facilitent la création et la mise à jour de la navigation
&lt;/li&gt;
&lt;li&gt;Elles offrent des possibilités de programmation en javascript (sauvegarde d&#39;informations)
&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/7441948585633322348/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/javascript-et-les-frames.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/7441948585633322348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/7441948585633322348'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/javascript-et-les-frames.html' title='Javascript et les Frames'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-5112699764090160858</id><published>2010-09-10T18:10:00.001-07:00</published><updated>2010-09-10T18:10:42.254-07:00</updated><title type='text'>Javascript et les cookies</title><content type='html'>Avec JavaScript, il est possible de programmer les célèbres cookies.&lt;br /&gt;
Nous allons voir ici à quoi servent les cookies et comment stocker et récupérer des informations grâce à eux.&lt;br /&gt;
En bas de cette page, vous trouverez des exemples de programmation de cookies.&lt;br /&gt;&lt;br /&gt;

&lt;span class=&quot;titre2&quot;&gt;1 - A quoi servent les cookies ? &lt;/span&gt;&lt;br /&gt;

&lt;br /&gt;
Les cookies sont très utilisés, par tous les sites commerciaux
et par de plus en plus de sites perso. La raison est simple. Un cookie
permet de &lt;span class=&quot;motcle&quot;&gt;stocker de manière permanente&lt;/span&gt; des informations sur le poste du visiteur, qui pourront être récupérées lors des futures visites.&lt;br /&gt;
Voyons quelques unes des principales informations stockées dans les cookies :
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Le nombre de visites, la date de la dernière visite,... (Exemple : Tout JavaScript.com)
 &lt;/li&gt;
&lt;li&gt;Un identifiant et un mot de passe pour une reconnaissance automatique du visiteur (Exemple : CDNow)
 &lt;/li&gt;
&lt;li&gt;Une
liste de mots-clés utilisés dans les moteurs de recherche pour cibler
les publicités à afficher (Exemple : beaucoup de moteurs de recherche) &lt;/li&gt;
&lt;li&gt;Une liste de paramètres de préférences de navigation pour personnaliser la page présentée (Exemple : Mon Yahoo !)
 &lt;/li&gt;
&lt;li&gt;Des informations à transférer d&#39;une page à l&#39;autre du site.
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;span class=&quot;titre2&quot;&gt;2 - Comment STOCKER des informations ?&lt;/span&gt;&lt;br /&gt;
Le type d&#39;informations à stocker n&#39;a aucune influence sur le code.
Un cookie est un fichier de texte qui contient une chaîne de caractères
contenant les informations concaténées.&lt;br /&gt;

Voici la fonction qui permet de stocker une information dans un cookie
&lt;span class=&quot;code&quot;&gt;
&lt;pre&gt;function SetCookie (name, value) {
 var argv=SetCookie.arguments;
 var argc=SetCookie.arguments.length;
 var expires=(argc &amp;gt; 2) ? argv[2] : null;
 var path=(argc &amp;gt; 3) ? argv[3] : null;
 var domain=(argc &amp;gt; 4) ? argv[4] : null;
 var secure=(argc &amp;gt; 5) ? argv[5] : false;
 document.cookie=name+&quot;=&quot;+escape(value)+
  ((expires==null) ? &quot;&quot; : (&quot;; expires=&quot;+expires.toGMTString()))+
  ((path==null) ? &quot;&quot; : (&quot;; path=&quot;+path))+
  ((domain==null) ? &quot;&quot; : (&quot;; domain=&quot;+domain))+
  ((secure==true) ? &quot;; secure&quot; : &quot;&quot;);
}&lt;/pre&gt;
&lt;/span&gt;

La &lt;span class=&quot;motcle&quot;&gt;valeur&lt;/span&gt; à stocker est associée à un &lt;span class=&quot;motcle&quot;&gt;nom&lt;/span&gt; de cookie.&lt;br /&gt;
La &lt;span class=&quot;motcle&quot;&gt;date&lt;/span&gt; d&#39;expiration permet de définir la longévité du cookie. Si elle est omise, le cookie est détruit à la fermeture du navigateur.&lt;br /&gt;
Le &lt;span class=&quot;motcle&quot;&gt;path&lt;/span&gt; indique simplement d&#39;où vient le cookie.&lt;br /&gt;
Le &lt;span class=&quot;motcle&quot;&gt;nom de domaine&lt;/span&gt; permet d&#39;identifier le cookie parmi tous ceux stockés sur la machine.&lt;br /&gt;
La variable &lt;span class=&quot;motcle&quot;&gt;secure&lt;/span&gt; indique si l&#39;accès au cookie est protégé.&lt;br /&gt;&lt;br /&gt;

&lt;br /&gt;
Donc pour stocker la valeur &lt;span class=&quot;code&quot;&gt;Arthur&lt;/span&gt; dans la variable &lt;span class=&quot;code&quot;&gt;prenom&lt;/span&gt; il suffit d&#39;appeler la fonction comme ceci :
&lt;span class=&quot;code&quot;&gt;
&lt;pre&gt; var pathname=location.pathname;
 var myDomain=pathname.substring(0,pathname.lastIndexOf(&#39;/&#39;)) +&#39;/&#39;;
 var date_exp = new Date();
 date_exp.setTime(date_exp.getTime()+(365*24*3600*1000));
 // Ici on définit une durée de vie de 365 jours
 SetCookie(&quot;prenom&quot;,&quot;Arthur&quot;,date_exp,myDomain);&lt;/pre&gt;
&lt;/span&gt;



&lt;br /&gt;&lt;br /&gt;
&lt;span class=&quot;titre2&quot;&gt;3 - Comment RECUPERER les informations ?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Voyons un cookie qui contiendrait les informations suivantes :
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;prenom = Arthur
 &lt;/li&gt;
&lt;li&gt;nb_visite = 3
&lt;/li&gt;
&lt;/ul&gt;
Pour récupérer l&#39;information &lt;span class=&quot;code&quot;&gt;prenom&lt;/span&gt;, il faut extraire, de la chaîne de caractères composant le cookie, le nom de la variable soit &lt;span class=&quot;code&quot;&gt;prenom&lt;/span&gt;. La valeur de &lt;span class=&quot;code&quot;&gt;prenom&lt;/span&gt; est la chaine de caractères située immédiatement après et séparée par &#39;;&#39; et par &#39; &#39;.&lt;br /&gt;
Voici le code des fonctions nécessaires à la récupération d&#39;une information :
&lt;span class=&quot;code&quot;&gt;
&lt;pre&gt;function getCookieVal(offset) {
 var endstr=document.cookie.indexOf (&quot;;&quot;, offset);
 if (endstr==-1)
        endstr=document.cookie.length;
 return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name) {
 var arg=name+&quot;=&quot;;
 var alen=arg.length;
 var clen=document.cookie.length;
 var i=0;
 while (i&amp;lt;clen) {
  var j=i+alen;
  if (document.cookie.substring(i, j)==arg)
                        return getCookieVal (j);
                i=document.cookie.indexOf(&quot; &quot;,i)+1;
                        if (i==0) break;}
 return null;
}&lt;/pre&gt;
&lt;/span&gt;

Si la variable demandée n&#39;est pas contenue dans le cookie, elle est considérée comme valant &lt;span class=&quot;code&quot;&gt;null&lt;/span&gt;.&lt;br /&gt;
Pour récupérer la variable &lt;span class=&quot;code&quot;&gt;prenom&lt;/span&gt;, il suffit d&#39;appeler la fonction :
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt; le_prenom=GetCookie(&quot;prenom&quot;);&lt;/pre&gt;
&lt;/span&gt;

&lt;b&gt;Maintenant, vous savez tout. Il ne reste plus qu&#39;à faire preuve
d&#39;imagination. La gestion des cookies est toujours la même, mais leur
utilisation est illimitée :-)&lt;/b&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/5112699764090160858/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/javascript-et-les-cookies.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/5112699764090160858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/5112699764090160858'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/javascript-et-les-cookies.html' title='Javascript et les cookies'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-4304245387010836184</id><published>2010-09-10T18:09:00.001-07:00</published><updated>2010-09-10T18:09:57.611-07:00</updated><title type='text'>le DHTML</title><content type='html'>Le DHTML est devenu incontournable depuis que la plupart (la totalité
?) des visiteurs utilisent des navigateurs qui supportent ce langage.&lt;br /&gt;
Malheureusement, l&#39;apprentissage du DHTML est complexe, tant à cause
des possibilités offertes qu&#39;en raison des soucis de compatibilité
entre navigateurs.&lt;br /&gt;
&lt;br /&gt;

&lt;br /&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
 &lt;td width=&quot;40%&quot;&gt;&amp;nbsp;&lt;/td&gt;
 &lt;td align=&quot;right&quot; width=&quot;60%&quot;&gt;&lt;form&gt;
&lt;select onchange=&quot;window.location=this.options[this.selectedIndex].value&quot;&gt;
 &lt;option value=&quot;savoir20.php3&quot;&gt;Navigation rapide :&lt;/option&gt;  
 &lt;option value=&quot;savoir20.php3&quot;&gt;Sommaire&lt;/option&gt;
 &lt;option value=&quot;savoir20_1.php3&quot;&gt;Introduction au DHTML&lt;/option&gt;
 &lt;option value=&quot;savoir20_2.php3&quot;&gt;Manipuler les calques&lt;/option&gt;
 &lt;option value=&quot;savoir20_3.php3&quot;&gt;Reconnaitre les navigateurs&lt;/option&gt;
 &lt;option value=&quot;savoir20_4.php3&quot;&gt;Assurer la compatibilité&lt;/option&gt;
 &lt;option value=&quot;savoir20_5.php3&quot;&gt;Exemple complet détaillé&lt;/option&gt;
&lt;/select&gt;&lt;/form&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;center&gt;&lt;div style=&quot;float: left; height: 260px; position: relative; width: 310px;&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
google_ad_client = &quot;pub-4954616225886678&quot;;
google_ad_width = 300;
google_ad_height = 250;
google_ad_format = &quot;300x250_as&quot;;
google_ad_type = &quot;text_image&quot;;
google_ad_channel =&quot;6156266328&quot;;
google_color_border = &quot;316AC5&quot;;
google_color_bg = &quot;EDF2F9&quot;;
google_color_link = &quot;DE8C18&quot;;
google_color_url = &quot;000099&quot;;
google_color_text = &quot;000099&quot;;
//--&gt;
&lt;/script&gt;
&lt;script src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; style=&quot;display: none;&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;/div&gt;
&lt;/center&gt;Ce tutorial sur le DHTML est donc découpé en plusieurs parties :&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Partie 1 - Les bases du DHTML&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir20_1.php3&quot;&gt;Introduction au DHTML : usage et (in)compatibilité&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir20_2.php3&quot;&gt;Manipulation de calques selon la norme officielle&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir20_3.php3&quot;&gt;Reconnaître les navigateurs&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Partie 2 - Assurer la compatibilité&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir20_4.php3&quot;&gt;Assurer la compatibilité&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir20_5.php3&quot;&gt;Un exemple complet et détaillé&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Partie 3 - Fonctionnement avancé&lt;/b&gt; (A venir)&lt;br /&gt;


&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/4304245387010836184/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/le-dhtml.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/4304245387010836184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/4304245387010836184'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/le-dhtml.html' title='le DHTML'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-3754232604683088170</id><published>2010-09-10T18:08:00.000-07:00</published><updated>2010-09-10T18:08:30.300-07:00</updated><title type='text'>Les formulaires</title><content type='html'>&lt;span class=&quot;titre2&quot;&gt;Sommaire du document&lt;/span&gt;&lt;br /&gt;
La partie formulaire HTML et JavaScript est très riche. Ce document est découpé en plusieurs parties.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir06_1.php3&quot;&gt;Les éléments de formulaires en détail&lt;/a&gt;&lt;br /&gt;
Toutes les balises HTML en détail pour créer des zones de texte, des boutons, des listes, des cases à cocher...&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir06_2.php3&quot;&gt;L&#39;accès aux éléments de formulaire par JavaScript&lt;/a&gt;&lt;br /&gt;
Comment détecter les événements de l&#39;utilisateur, manipuler les propriétés des éléments de formulaires...&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir06_3.php3&quot;&gt;Trucs et astuces&lt;/a&gt;&lt;br /&gt;
Par exemple donner le focus, empêcher plusieurs clics sur un bouton,
détecter la touche [Entrée], ajouter des lignes à une liste, ...
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir06_4.php3&quot;&gt;Contrôles de saisies&lt;/a&gt;&lt;br /&gt;Cette
page présente les différents contrôles de saisie que l&#39;on peut faire
dans un formulaire : saisir un nombre, une date, un email...
&lt;/li&gt;
&lt;/ul&gt;
&lt;span class=&quot;titre2&quot;&gt;Introduction aux formulaires&lt;/span&gt;&lt;br /&gt;
Les formulaires sont la base des échanges entre le site et le visiteur.&lt;br /&gt;
JavaScript ne peut pas échanger d&#39;information à partir de fichier texte ou de base de données.&lt;br /&gt;Pour
permettre au visiteur de transmettre des informations, les formulaires
sont indispensables. Et grâce au JavaScript, il est possible de les
rendre très pratiques.&lt;br /&gt;
&lt;br /&gt;
Le javascript associé aux formulaire permet : 
&lt;ul&gt;
&lt;li&gt;d&#39;assister et de guider le visiteur,
&lt;/li&gt;
&lt;li&gt;de contrôler la saisie,
&lt;/li&gt;
&lt;li&gt;de faire des traitements (calcul, manipulation de chaînes de caractères),
&lt;/li&gt;
&lt;li&gt;d&#39;envoyer les résultats au serveur.
&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/3754232604683088170/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/les-formulaires.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/3754232604683088170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/3754232604683088170'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/les-formulaires.html' title='Les formulaires'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-7306944190117745435</id><published>2010-09-10T18:07:00.000-07:00</published><updated>2010-09-10T18:07:17.505-07:00</updated><title type='text'>Les popups, le guide définitif</title><content type='html'>Devant le nombre de questions concernant les popups, devant la richesse
des options et des possibilités, je crois que ce tutorial est
indispensable. Il est découpé en 2 pages :&lt;br /&gt;
 1 - Les bases des popups &lt;br /&gt;
 2 - &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir15_1.php3&quot;&gt;Aller plus loin&lt;/a&gt;&lt;br /&gt;

&lt;br /&gt;&lt;br /&gt;
&lt;span class=&quot;titre2&quot;&gt;C&#39;est quoi un popup ?&lt;/span&gt;&lt;br /&gt;
Le mot popup peut être traduit par fenêtre surgissante. L&#39;ouverture de
cette fenêtre est déclenchée par un événement utilisateur (clic,
ouverture de site, minuterie, ...) via une seule ligne de code
javascript. Un popup est ouvert grâce à la méthode (ou fonction)
appelée sur l&#39;objet &lt;span class=&quot;code&quot;&gt;window&lt;/span&gt;. Cette fonction attend 3 paramètres :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&amp;nbsp;&amp;nbsp;window.open( page [,nom] [,options] )&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Les trois paramètres sont des chaînes de caractères.&lt;br /&gt;
- &lt;span class=&quot;code&quot;&gt;page&lt;/span&gt; contient l&#39;adresse de la page à afficher.&lt;br /&gt;
- &lt;span class=&quot;code&quot;&gt;nom&lt;/span&gt; contient le nom du popup qui va être ouvert. Non obligatoire.&lt;br /&gt;
- &lt;span class=&quot;code&quot;&gt;options&lt;/span&gt; est une chaîne de caractères contenant les options de paramétrage du popup. Non obligatoire.&lt;br /&gt;
Les 2 derniers paramètres ne sont pas indispensables.&lt;br /&gt;
&lt;br /&gt;
Pour ouvrir un popup sur un lien, voici la syntaxe HTML :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;A href=&quot;javascript:popup(&#39;popup.html&#39;)&quot;&amp;gt;Ouverture popup basique&amp;lt;/A&amp;gt;&lt;/span&gt;&lt;br /&gt;
avec comme déclaration la fonction &lt;span class=&quot;code&quot;&gt;popup()&lt;/span&gt; :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;SCRIPT language=&quot;javascript&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function popup(page) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.open(page);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
&lt;/span&gt;

Voici le résultat de ce lien:&lt;br /&gt;
&lt;script language=&quot;javascript&quot;&gt;
function popup(page) {
  window.open(page);
}
&lt;/script&gt;
&lt;a href=&quot;javascript:popup(&#39;popup.html&#39;)&quot;&gt;Ouverture popup basique&lt;/a&gt;&lt;br /&gt;

&lt;br /&gt;&lt;br /&gt;
&lt;span class=&quot;titre2&quot;&gt;Les options d&#39;affichage&lt;/span&gt;&lt;br /&gt;
Il est possible grâce au second paramètre d&#39;affecter un nom au popup
ouvert. Ainsi les autres popups seront ouverts dans le même popup. Cela
évite d&#39;envahir l&#39;écran du visiteur avec de multiples fenêtres. Pour
remettre le popup en premier plan, voir la page &quot;Aller plus loin&quot;.&lt;br /&gt;
Sans le paramètre &lt;span class=&quot;code&quot;&gt;nom&lt;/span&gt;, un nouveau popup est ouvert à chaque fois.&lt;br /&gt;
&lt;br /&gt;
Le dernier paramètre contient une chaîne d&#39;options d&#39;affichage. Chaque
option est séparée par une virgule (à ne pas confondre avec la syntaxe
des feuilles de style qui demande un point-virgule).
Voici la liste des options :
&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
 &lt;td class=&quot;texte&quot; width=&quot;150&quot;&gt;&lt;b&gt;Propriétés&lt;/b&gt;&lt;/td&gt;
 &lt;td class=&quot;texte&quot; width=&quot;300&quot;&gt;&lt;b&gt;Effets&lt;/b&gt;&lt;/td&gt;
 &lt;td class=&quot;texte&quot; width=&quot;200&quot;&gt;&lt;b&gt;Valeurs possibles&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td class=&quot;texte&quot;&gt;directories&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;Affichage de la barre de liens&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;yes | no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td class=&quot;texte&quot;&gt;menubar&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;Affichage de la barre de menu&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;yes | no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td class=&quot;texte&quot;&gt;status&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;Affichage de la barre de statut&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;yes | no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td class=&quot;texte&quot;&gt;location&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;Affichage de la zone d&#39;adresse&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;yes | no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td class=&quot;texte&quot;&gt;scrollbars&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;Affichage des barres de scrolling&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;yes | no | auto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td class=&quot;texte&quot;&gt;resizable&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;Autorise le redimensionnement du popup&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;yes | no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td class=&quot;texte&quot;&gt;height&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;Hauteur en pixels&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;nombre entier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td class=&quot;texte&quot;&gt;width&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;Largeur en pixels&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;nombre entier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td class=&quot;texte&quot;&gt;left&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;Position horizontale en pixels sur l&#39;écran&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;nombre entier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td class=&quot;texte&quot;&gt;top&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;Position verticale en pixels sur l&#39;écran&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;nombre entier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td class=&quot;texte&quot;&gt;fullscreen&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;Popup en plein écran (version 5 et +)&lt;/td&gt;
 &lt;td class=&quot;texte&quot;&gt;yes | no&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;b&gt;Quelques exemples de combinaisons d&#39;options&lt;/b&gt; :&lt;br /&gt;
&lt;script language=&quot;javascript&quot;&gt;
function OuvrirPopup(page,nom,option) {
  window.open(page,nom,option);
}
&lt;/script&gt;
&lt;br /&gt;
&lt;a href=&quot;javascript:OuvrirPopup(&#39;popup.html&#39;,&#39;&#39;,&#39;top=10,left=10&#39;)&quot;&gt;Popup positionné&lt;/a&gt;&lt;br /&gt;
Position fixe en haut à gauche&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;OuvrirPopup(&#39;popup.html&#39;,&#39;&#39;,&#39;top=10,left=10&#39;)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;javascript:OuvrirPopup(&#39;popup.html&#39;,&#39;&#39;,&#39;resizable=no,location=no,width=200,height=200,menubar=no,status=no,scrollbars=no,menubar=no&#39;)&quot;&gt;Popup minimaliste&lt;/a&gt;&lt;br /&gt;
Aucune barre de menu, non redimensionnable, taille fixe&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt; OuvrirPopup(&#39;popup.html&#39;, &#39;&#39;, &#39;resizable=no,
location=no, width=200, height=100, menubar=no, status=no,
scrollbars=no, menubar=no&#39;)&lt;/span&gt;&lt;br /&gt;

&lt;br /&gt;
&lt;a href=&quot;javascript:OuvrirPopup(&#39;popup.html&#39;,&#39;&#39;,&#39;fullscreen=yes&#39;)&quot;&gt;Popup fullscreen&lt;/a&gt;&lt;br /&gt;
Page en plein écran (version 5 et +). Faire un ALT [F4] pour fermer la fenêtre &lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;OuvrirPopup(&#39;popup.html&#39;,&#39;&#39;,&#39;fullscreen=yes&#39;)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;


&lt;br /&gt;&lt;br /&gt;
Voici la fonction javascript qui ouvre un popup pour tous ces exemples :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;SCRIPT language=javascript&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function OuvrirPopup(page,nom,option) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  window.open(page,nom,option);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/SCRIPT&amp;gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/7306944190117745435/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/les-popups-le-guide-definitif.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/7306944190117745435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/7306944190117745435'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/les-popups-le-guide-definitif.html' title='Les popups, le guide définitif'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-6114108209970393967</id><published>2010-09-10T18:06:00.000-07:00</published><updated>2010-09-10T18:06:03.361-07:00</updated><title type='text'>Les limites de javascript</title><content type='html'>&lt;center&gt;&lt;div style=&quot;float: left; height: 260px; width: 310px;&quot;&gt;

  Cette page est destinée à définir précisément les &lt;span class=&quot;motcle&quot;&gt;possibilités&lt;/span&gt; et les &lt;span class=&quot;motcle&quot;&gt;limites&lt;/span&gt;
du language JavaScript. De nombreux webmasters pensent que javascript
permet toutes les fantaisies et répond à tous les besoins. C&#39;est loin
d&#39;être le cas.&lt;/div&gt;
&lt;/center&gt;
Si vous confondez Java et JavaScript, je vous invite à lire cette page de &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir04.php3&quot;&gt;&lt;b&gt;comparaison&lt;/b&gt;&lt;/a&gt;.&lt;br /&gt;
Nous allons commencer par voir ce qu&#39;il est possible de faire avec
JavaScript. Nous verrons ensuite comment la sécurité implique des
limites au langage.
En fin nous aborderons des alternatives avec d&#39;autres langages pour
internet.&lt;br /&gt;&lt;br /&gt;


&lt;span class=&quot;titre2&quot;&gt;1 - Ce que permet JavaScript&lt;/span&gt;&lt;br /&gt;
Le language JavaScript est parfaitement &lt;span class=&quot;motcle&quot;&gt;adapté pour des traitements sur le poste du navigateur&lt;/span&gt;. Voici quelques exemples de cas où JavaScript est efficace (voire irremplaçable) :
&lt;ul&gt;
&lt;li&gt;Vérification de saisie dans des formulaires (Adresse, email)
&lt;/li&gt;
&lt;li&gt;Calculs simples suite à des saisies de formulaire (Tarifs, calculatrice)
&lt;/li&gt;
&lt;li&gt;Moteur de recherche (base de recherche définie par le webmaster)
&lt;/li&gt;
&lt;li&gt;Gestion des dates et des heures (Date du jour, Date de mise à jour, Calendriers)
&lt;/li&gt;
&lt;li&gt;Gestion des cookies (Sauvegarde d&#39;information : nombre de visites, caddie virtuel)
&lt;/li&gt;
&lt;li&gt;Gestion de la navigation (Menus dynamique, popup)
&lt;/li&gt;
&lt;li&gt;Animations graphiques (Dynamic HTML, MouseOver, bannières rotatives, jeux)
&lt;/li&gt;
&lt;li&gt;...
&lt;/li&gt;
&lt;/ul&gt;
La liste n&#39;est pas terminée. L&#39;imagination du développeur peut
repousser les limites du JavaScript, sans pour autant réaliser
l&#39;impossible. Voyons maintenant les raisons des limites techniques
qu&#39;imposent ce langage.
&lt;br /&gt;&lt;br /&gt;

&lt;span class=&quot;titre2&quot;&gt;2 - JavaScript et la sécurité &lt;/span&gt;&lt;br /&gt;JavaScript
a été conçu pour limiter (presque) complètement les risques pour le
visiteur. En ce sens, on peut dire que exécuter un javascript sur son
navigateur ne comporte aucun risque pour les données et le matériel.
JavaScript ne permet pas d&#39;écrire ou de lire un fichier sur le disque
dur du visiteur ou sur le serveur. Ainsi, vous ne risquez pas de voir
des données confidentielles récupérées à votre insu. De même, il n&#39;est
pas possible de lister les logiciels copiés et non enregistrés.
Impossible aussi de détruire des fichiers indispensables ou
d&#39;introduire un virus sur le poste d&#39;un visiteur.&lt;br /&gt;
JavaScript permet quand même d&#39;écrire et de lire le disque dur dans la zone réservée aux &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir02.php3&quot;&gt;&lt;b&gt;cookies&lt;/b&gt;&lt;/a&gt;. C&#39;est la seule interaction que javascript peut avoir avec votre disque dur.&lt;br /&gt;
&lt;br /&gt;
Certains me diront que JavaScript possède des fonctions pour lire des
fichiers texte. En fait, javascript permet d&#39;intégrer des applets Java
ou ActiveX qui elles sont capables d&#39;agir sur le disque dur. Il ne
s&#39;agit pourtant pas de javascript pur : si vous désactivez Java et
ActiveX, rien ne se passera.&lt;br /&gt;
&lt;br /&gt;
JavaScript seul ne peut pas non plus récupérer l&#39;adresse IP d&#39;un
visiteur. Il est indispensable également de passer par des appels à
Java ou à ActiveX.&lt;br /&gt;
&lt;br /&gt;
J&#39;ai dit que javascript est &lt;i&gt;presque&lt;/i&gt; sans risque. Il est
possible de coder un javascript qui ouvre des popups jusqu&#39;à épuiser
complètement les ressources système. Dans ce cas, la seule solution est
de rebooter votre ordinateur. On peut aussi imaginer un javascript qui
tourne en tâche de fond d&#39;une page web, occupant ainsi des ressources
et réduisant les performances de votre poste. &lt;br /&gt;
&lt;br /&gt;
Les performances de javascript en terme de sécurité pour les visiteurs
font que JavaScript est accepté par (presque) tous. Le prix de cette
sécurité et de cette quasi universalité se traduit par des limites
techniques que nous allons détailler tout de suite.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;


&lt;span class=&quot;titre2&quot;&gt;3 - Les limites de JavaScript&lt;/span&gt;&lt;br /&gt;
La principale limite de JavaScript est qu&#39;il ne permet pas de lire et
d&#39;écrire sur le disque dur du visiteur (en dehors des cookies) et du
serveur.
Il est donc impossible en javascript de générer par exemple un fichier
de connexions sur le serveur, ou un compteur de visites sur une page
donnée.
De même, JavaScript ne peut pas s&#39;interfacer avec une base de données.
Impossible alors de concevoir un forum de discussion, un script de
sondage ou de vote, dont les données sont stockées, soit dans un
fichier, soit en base sur le serveur. Impossible aussi de lier un
catalogue en base sur le serveur à votre boutique en ligne.&lt;br /&gt;
JavaScript n&#39;échange pas avec d&#39;autres machines connectées. Impossible donc de créer une page de chat (discussion en direct).&lt;br /&gt;
&lt;br /&gt;
Les limites sont nombreuses et réelles. Heureusement, d&#39;autres technologies existent.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;


&lt;span class=&quot;titre2&quot;&gt;4 - Les alternatives&lt;/span&gt;&lt;br /&gt;
Il existe une multitude de technologies actuellement qui permettent de
combler les lacunes de javascript. On peut les séparer en 2 catégories
:
&lt;ul&gt;
&lt;li&gt;Celles dont le code est exécuté sur le poste du visiteur
&lt;/li&gt;
&lt;li&gt;Celles dont le code est exécuté par le serveur qui renvoie une page au format HTML
&lt;/li&gt;
&lt;/ul&gt;
Dans la première catégorie, on peut citer Flash, Java, et
d&#39;autres qui permettent par exemple de créer des univers 3D. En
général, ils nécessitent un plugin et ne sont donc pas compatibles avec
tous les navigateurs. Ils repoussent les limites de l&#39;animation
graphique et offrent en général plus de possibilité de lecture/écriture
sur le disque. La sécurité n&#39;est pas assurée : plantages fréquents,
accès au disque, ...&lt;br /&gt;
&lt;br /&gt;
Il existe surtout de nombreux langages de scripts qui sont exécutés sur
le serveur, permettant ainsi de stocker des informations et de générer
des pages dynamiques à partir de bases de données. Tout JavaScript.com
utilise de plus en plus la technologie PHP que je recommande à tous.&lt;br /&gt;
Les risques pour la sécurité sont nuls, car le visiteur ne reçoit que
des pages en HTML, éventuellement enrichies par du JavaScript.&lt;br /&gt;
Si vous voulez en savoir plus sur le PHP, lisez le tutorial sur l&#39;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir23.php&quot;&gt;introduction au PHP&lt;/a&gt;.&lt;br /&gt;


&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
J&#39;ai, dans cette page, donné mon avis sur les limites de JavaScript. Je ne prétends pas que JavaScript est &lt;b&gt;LA&lt;/b&gt;
solution à tous nos besoins. Les languages CGI, ASP ou PHP sont
indispensables. Mon but était de re-situer les possibilités de
JavaScript (et de mettre en garde les internautes des risques liés aux
plugins).</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/6114108209970393967/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/les-limites-de-javascript.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/6114108209970393967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/6114108209970393967'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/les-limites-de-javascript.html' title='Les limites de javascript'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-3028363885978964640</id><published>2010-09-10T18:04:00.000-07:00</published><updated>2010-09-10T18:04:07.526-07:00</updated><title type='text'>La structure d&#39;un Script</title><content type='html'>Le javascript a une structure de programmation proche du langage C, moins riche naturellement.&lt;br /&gt;
Dans cette page, nous verrons : &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir12.php3#comm&quot;&gt;Les commentaires&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir12.php3#groupe&quot;&gt;Le groupement d&#39;instructions&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir12.php3#if&quot;&gt;Les tests conditionnels&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir12.php3#boucle&quot;&gt;Les structures de boucle&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; name=&quot;comm&quot;&gt;&lt;/a&gt;
&lt;span class=&quot;titre2&quot;&gt;Ecrire un commentaire&lt;/span&gt;&lt;br /&gt;
Indispensable les commentaires en programmation.&lt;br /&gt;
Pour mettre en commentaire une partie de code, jusqu&#39;au prochain retour à la ligne :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var age=25; &lt;b&gt;//&lt;/b&gt; Ceci est en commentaire&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Pour mettre en commentaire plusieurs lignes de code :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;/*&lt;/b&gt; Ceci est en commentaire ligne 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;Ligne 2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;Dernière ligne &lt;b&gt;*/&lt;/b&gt;&lt;br /&gt;
&lt;/span&gt;


&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; name=&quot;groupe&quot;&gt;&lt;/a&gt;
&lt;span class=&quot;titre2&quot;&gt;Grouper des instructions&lt;/span&gt;&lt;br /&gt;
Comme en C, les instructions sont regroupées par les accolades &lt;span class=&quot;code&quot;&gt;{&lt;/span&gt; et &lt;span class=&quot;code&quot;&gt;}&lt;/span&gt;.
Dans un script, il doit y avoir autant d&#39;accolades ouvertes que d&#39;accolades fermées.&lt;br /&gt;
Le groupement d&#39;instructions est utile. Il permet par exemple de regrouper les instructions d&#39;une fonction :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;function somme(a,b) &lt;b&gt;{&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var sum=a+b;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return sum;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;}&lt;/b&gt;&lt;br /&gt;
&lt;/span&gt;
Cette fonction inutile retourne la somme de deux paramètres.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; name=&quot;if&quot;&gt;&lt;/a&gt;
&lt;span class=&quot;titre2&quot;&gt;Le test conditionnel&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Test simple&lt;/span&gt;&lt;br /&gt;
L&#39;instruction &lt;span class=&quot;code&quot;&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; permet de diriger l&#39;exécution du script suivant le résultat d&#39;un test.&lt;br /&gt;
Il y a 2 moyens d&#39;utiliser &lt;span class=&quot;code&quot;&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt;.&lt;br /&gt;
Si l&#39;action à réaliser tient en une instruction :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;if (age&amp;lt;18) alert(&quot;Vous devez être majeur&quot;);&lt;br /&gt;
&lt;/span&gt;
Ici, si l&#39;âge du visiteur est inférieur à 18 ans, un message est affiché.&lt;br /&gt;
&lt;br /&gt;
Si l&#39;action à réaliser tient en plusieurs instructions :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;if (age&amp;lt;18) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&quot;Vous devez être majeur&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.location=&quot;mineur.php3&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;/span&gt;
Ici, si l&#39;âge du visiteur est inférieur à 18 ans, un message est affiché et le visiteur est redirigé vers la page &lt;i&gt;mineur.php3&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Test Si - Sinon&lt;/span&gt;&lt;br /&gt;
Reprenons notre dernier exemple :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;if&lt;/b&gt; (age&amp;lt;18) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&quot;Vous devez être majeur&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.location=&quot;mineur.php3&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;b&gt;else&lt;/b&gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.location=&quot;majeur.php3&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;/span&gt;
Ici, si le visiteur est mineur, il est redirigé vers &lt;i&gt;mineur.php3&lt;/i&gt;, sinon il est redirigé vers la page &lt;i&gt;majeur.php3&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=2721247973472564493&quot; name=&quot;boucle&quot;&gt;&lt;/a&gt;
&lt;span class=&quot;titre2&quot;&gt;Les structures de boucles&lt;/span&gt;&lt;br /&gt;
Comme en C, le javascript reconnaît les boucles itératives et les boucles conditionnelles.&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Les boucles itératives&lt;/span&gt;&lt;br /&gt;
Une boucle itérative exécute un groupe d&#39;instructions tant que le compteur d&#39;itérations n&#39;a pas atteint une valeur donnée.&lt;br /&gt;
Voici la syntaxe générale :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;for(&lt;/b&gt;initialisation&lt;b&gt;;&lt;/b&gt;condition&lt;b&gt;;&lt;/b&gt;opération&lt;b&gt;)&lt;/b&gt; &lt;b&gt;{&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Vos instructions&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;}&lt;/b&gt;&lt;br /&gt;
&lt;/span&gt;

Initialisation permet d&#39;initialiser la valeur du compteur.&lt;br /&gt;
Condition teste si le compteur a atteint la valeur limite. Si condition est vraie, la boucle continue.&lt;br /&gt;
operation permet d&#39;incrémenter le compteur à chaque passage de la boucle.&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples concrets.&lt;br /&gt;
Faire une boucle pour i variant de 0 à 100 inclus par pas de 1&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=0;i&amp;lt;=100;i=i+1)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Faire une boucle pour i variant de 10 à 0 inclus par pas de -1&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=10;i&amp;gt;0;i=i-1)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Voici une application mathématique. Il s&#39;agit de calculer la somme des nombres de 1 à N.&lt;br /&gt;
Entrez N dans le champ texte et cliquez sur le bouton :
&lt;br /&gt;
&lt;form&gt;
N = &lt;input name=&quot;N&quot; type=&quot;text&quot; value=&quot;10&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;input onclick=&quot;somme(this.form.N.value)&quot; type=&quot;button&quot; value=&quot;Calculer&quot; /&gt;
&lt;/form&gt;
La fonction qui calcule cette somme est déclarée :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;function somme(N) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var sum=0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (var i=1;i&amp;lt;=N;i=i+1) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sum=sum+i;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&quot;Somme de 1 à &quot;+N+&quot; = &quot;+sum);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Astuces d&#39;écriture&lt;/span&gt;&lt;br /&gt;
Le javascript reprend du C la syntaxe particulière pour les additions et soustractions.&lt;br /&gt;
Ainsi, écrire &lt;span class=&quot;code&quot;&gt;a=a+1;&lt;/span&gt; est équivalent à &lt;span class=&quot;code&quot;&gt;a++;&lt;/span&gt;&lt;br /&gt;
Et &lt;span class=&quot;code&quot;&gt;a=a-1;&lt;/span&gt; est équivalent à &lt;span class=&quot;code&quot;&gt;a--;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Dans la même idée, on peut aussi remplacer &lt;span class=&quot;code&quot;&gt;a=a+5;&lt;/span&gt; par &lt;span class=&quot;code&quot;&gt;a+=5;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Vous trouverez donc souvent les boucles &lt;span class=&quot;code&quot;&gt;for&lt;/span&gt; avec cette syntaxe :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(var i=0;i&amp;lt;100;i++)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre3&quot;&gt;Les boucles conditionnelles&lt;/span&gt;&lt;br /&gt;
Il peut être utile de faire une boucle tant qu&#39;une condition est vraie.&lt;br /&gt;
La boucle &quot;tant que&quot; est déclarée par &lt;span class=&quot;code&quot;&gt;while&lt;/span&gt; :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;while (condition) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Les instructions de la boucle&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;/span&gt;
Ici, tant que &lt;span class=&quot;code&quot;&gt;condition&lt;/span&gt; est vraie, la boucle est exécutée.&lt;br /&gt;
&lt;br /&gt;
On peut imaginer de demander au visiteur de saisir un nombre supérieur
à 100 et de recommencer tant que ce nombre n&#39;est pas supérieur à 100.&lt;br /&gt;
&lt;form&gt;
&lt;input onclick=&quot;demander()&quot; type=&quot;button&quot; value=&quot;Commencer le test&quot; /&gt;
&lt;/form&gt;
Voici la fonction appelée par le bouton :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;function demander() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var nb=0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (nb&amp;lt;=100) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nb=prompt(&quot;Entrez un nombre supérieur à 100&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&quot;Merci !&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;/span&gt;

Ici, la boucle est répétée tant que &lt;span class=&quot;code&quot;&gt;nb&lt;/span&gt; n&#39;est pas supérieur à 100. Dès que &lt;span class=&quot;code&quot;&gt;nb&lt;/span&gt; est plus grand que 100, on quitte la boucle et le message Merci est affiché.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;titre2&quot;&gt;La programmation&lt;/span&gt;&lt;br /&gt;
Les structures de programmation sont indispensables et sont utilisées dans tous les scripts du site.&lt;br /&gt;
Il peut être intéressant de lire aussi la page sur &lt;a href=&quot;http://www.toutjavascript.com/savoir/savoir05.php3&quot;&gt;les limites de javascript&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/3028363885978964640/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/la-structure-dun-script.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/3028363885978964640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/3028363885978964640'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/la-structure-dun-script.html' title='La structure d&#39;un Script'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2721247973472564493.post-3138344841089235993</id><published>2010-09-10T18:00:00.000-07:00</published><updated>2010-09-10T18:00:39.330-07:00</updated><title type='text'>Introduction à javascript</title><content type='html'>JavaScript est un langage de programmation complètement lié au
langage HTML. Le développeur internet code ses pages HTML en y
intégrant des sources JavaScript. Le visiteur, par l&#39;intermédiaire de
son navigateur, charge le code des pages.
&lt;br /&gt;
C&#39;est le navigateur qui interprète le code HTML et JavaScript.
L&#39;interprétation dépend naturellement du type de navigateur utilisé et
de sa version.
&lt;br /&gt;
JavaScript est un langage objet et événementiel. Le développeur
peut créer des objets sur la page, avec des propriétés et des méthodes
et leur associer des actions en fonction d&#39;événements déclenchés par le
visiteur (passage de souris, clic, saisie clavier, etc...) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;span class=&quot;titre2&quot;&gt;1 - Comment intégrer du code JavaScript dans une page HTML ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;

   Il y a plusieurs endroits dans une page web où il est possible d&#39;intégrer du code JavaScript :
   &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;dans le corps de la page,
   &lt;/li&gt;
&lt;li&gt;en entête de page,
   &lt;/li&gt;
&lt;li&gt;dans un événement d&#39;un objet de la page.&lt;/li&gt;
&lt;/ul&gt;
La structure classique d&#39;une page HTML contenant du JavaScript est la suivante :
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt;&amp;lt;HTML&amp;gt;
&amp;lt;HEAD&amp;gt;
&amp;lt;TITLE&amp;gt;Titre de page&amp;lt;/TITLE&amp;gt;
&amp;lt;SCRIPT language=&quot;JavaScript&quot;&amp;gt;
&amp;lt;!--   // Cache ce qui suit aux navigateurs qui ne supportent pas JavaScript


//--&amp;gt;  // Fin de la partie cachée
&amp;lt;/SCRIPT&amp;gt;
&amp;lt;/HEAD&amp;gt;

&amp;lt;BODY&amp;gt;
&amp;lt;SCRIPT type=&quot;text/JavaScript&quot;&amp;gt;
&amp;lt;!--   // Cache ce qui suit aux navigateurs qui ne supportent pas JavaScript


//--&amp;gt;  // Fin de la partie cachée
&amp;lt;/SCRIPT&amp;gt;
&amp;lt;/BODY&amp;gt;
&amp;lt;/HTML&amp;gt;&lt;/pre&gt;
&lt;/span&gt;
C&#39;est donc entre les balises &lt;span class=&quot;motcle&quot;&gt;&amp;lt;SCRIPT&amp;gt;&lt;/span&gt;
qu&#39;est inséré le code javascript. Veillez à bien respecter la syntaxe
proposée, en particulier les &amp;lt;!-- et //--&amp;gt; pour cacher le script
aux anciens navigateurs.&lt;br /&gt;
&lt;br /&gt;
Il est possible aussi de faire appel à un script quand l&#39;utilisateur clique sur un lien :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&lt;pre&gt;&amp;lt;A HREF=&quot;javascript:ma_fonction()&quot;&amp;gt;Cliquez ici&amp;lt;/A&amp;gt;&lt;/pre&gt;
&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
&lt;span class=&quot;titre2&quot;&gt;2 - La déclaration des variables, des objets et des tableaux&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;

&lt;br /&gt;
JavaScript utilise l&#39;instruction &lt;span class=&quot;motcle&quot;&gt;var&lt;/span&gt; pour la déclaration. Toute nouvelle variable doit être initialisée.&lt;br /&gt;&lt;br /&gt;

&lt;span class=&quot;titre3&quot;&gt;Déclaration des variables basiques&lt;/span&gt;
&lt;br /&gt;
Pour déclarer une variable basique, c&#39;est-à-dire de type entier,
numérique, chaîne de caractères, etc, il ne faut pas déclarer le type.
Le navigateur le détecte.
&lt;br /&gt;
EXEMPLES de déclaration de variables basiques :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&lt;pre&gt;var prenom_visiteur=&quot;Marcel&quot;;
var nom_visiteur=&quot;Dupond&quot;;
var age_visiteur=29;&lt;/pre&gt;
&lt;/span&gt;

&lt;br /&gt;
On remarque la présence du point virgule (;) à la fin de chaque instruction.
&lt;br /&gt;
Il est possible de placer sur une même ligne plusieurs instructions séparées par des points virgules.&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
Une variable déjà déclarée s&#39;utilise ensuite normalement :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&lt;pre&gt;var accueil=&quot;Bonjour &quot; + prenom_visiteur + &quot; &quot; + nom_visiteur;&lt;/pre&gt;
&lt;br /&gt;
&lt;/span&gt;


&lt;span class=&quot;titre3&quot;&gt;Déclaration et création d&#39;objets&lt;/span&gt;
&lt;br /&gt;
JavaScript intègre d&#39;origine plusieurs type d&#39;objets. Voyons tout d&#39;abord l&#39;objet &lt;span class=&quot;motcle&quot;&gt;Date&lt;/span&gt;, très utile dans un environnement internet.
&lt;br /&gt;
La déclaration se fait toujours avec &lt;span class=&quot;motcle&quot;&gt;var&lt;/span&gt;. Pour créer un objet, il faut utiliser le mot-clé &lt;span class=&quot;motcle&quot;&gt;new&lt;/span&gt; suivi du type d&#39;objet &lt;span class=&quot;motcle&quot;&gt;Date&lt;/span&gt;. ATTENTION, le respect des majuscules/minuscule est indispensable et source de nombreuses erreurs.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&lt;pre&gt;var date_jour=new Date();&lt;/pre&gt;
&lt;/span&gt;
Cette ligne crée un objet &lt;span class=&quot;motcle&quot;&gt;Date&lt;/span&gt; contenant la date du jour.&lt;br /&gt;

&lt;span class=&quot;code&quot;&gt;
&lt;pre&gt;var une_date=new Date(annee,mois-1,jour,heure,min)&lt;/pre&gt;
&lt;/span&gt;

Cette ligne crée un objet &lt;span class=&quot;motcle&quot;&gt;date&lt;/span&gt; avec une date paramétrable.&lt;br /&gt;&lt;br /&gt;

&lt;span class=&quot;titre3&quot;&gt;Déclaration et utilisation des tableaux&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
En JavaScript, les tableaux sont des objets et leur déclaration est identique à celle vue plus haut.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt;var un_tableau=new Array(10)&lt;/pre&gt;
&lt;/span&gt;
&lt;br /&gt;
Cette ligne crée un tableau de 10 éléments de type basique
(réel, entier, chaîne de caractères). En JavaScript, le premier élément
est indexé à 0. Il est possible de déclarer un tableau sans dimension
fixée. La taille du tableau s&#39;adapte en fonction du contenu :&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt;var un_autre_tableau=new Array;&lt;/pre&gt;
&lt;/span&gt;

&lt;br /&gt;
Pour accéder aux éléments du tableau, on utilise les crochets &quot;[&quot; et &quot;]&quot;
&lt;span class=&quot;code&quot;&gt;
&lt;pre&gt;un_tableau[0]=10;
un_tableau[9]=5;&lt;/pre&gt;
&lt;/span&gt;

&lt;br /&gt;
Des &lt;span class=&quot;motcle&quot;&gt;méthodes&lt;/span&gt; associées à l&#39;objet
permettent d&#39;effectuer des traitements ou d&#39;accéder à des propriétés.
On utilise la notation pointée pour appliquer une méthode sur un objet
ou pour accéder à une propriété.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;&lt;pre&gt;var dimension=un_tableau.length;&lt;/pre&gt;
&lt;/span&gt;
Cette ligne retourne le nombre d&#39;éléments de l&#39;objet &lt;span class=&quot;motcle&quot;&gt;Array&lt;/span&gt; appelé &quot;un_tableau&quot;.&lt;br /&gt;&lt;br /&gt;

&lt;span class=&quot;titre2&quot;&gt;3 - La déclaration des fonctions et des instructions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;

&lt;br /&gt;
Les fonctions et instructions sont déclarées et codées dans
l&#39;entête de la page et peuvent être appelées ensuite à n&#39;importe quel
endroit de la page. Pour déclarer une fonction ou une instruction, on
utilise le mot-clé &quot;function&quot;, suivi de son nom et des éventuels
paramètres.&lt;br /&gt;
&lt;span class=&quot;code&quot;&gt;
&lt;pre&gt;function ma_fonction(param1, param2)
 {
 ....
 }

function mon_autre_fonction()
 {
 ....
 }&lt;/pre&gt;
&lt;/span&gt;

&lt;br /&gt;
Le corps des fonctions et instructions est délimité par &quot;{&quot; et
&quot;}&quot; dans lequel on place la déclaration des variables locales, propres
à la fonction, ainsi que l&#39;ensemble des traitements.
&lt;br /&gt;
Une fonction aura dans son corps une ou plusieurs instructions &lt;span class=&quot;motcle&quot;&gt;return&lt;/span&gt; qui permet de renvoyer une valeur ou un objet. L&#39;instruction &lt;span class=&quot;motcle&quot;&gt;return&lt;/span&gt; n&#39;est pas obligatoire; on a alors affaire à une instruction qui ne renvoie pas de valeur.
&lt;br /&gt;
Les fonctions déclarées dans l&#39;entête de la page peuvent être
appelées elles-mêmes, de manière itérative, dans d&#39;autres fonctions et
dans le corps de la page.
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-script.blogspot.com/feeds/3138344841089235993/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://we-script.blogspot.com/2010/09/introduction-javascript.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/3138344841089235993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2721247973472564493/posts/default/3138344841089235993'/><link rel='alternate' type='text/html' href='http://we-script.blogspot.com/2010/09/introduction-javascript.html' title='Introduction à javascript'/><author><name>javascript programming</name><uri>http://www.blogger.com/profile/18310856485751521968</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>