<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hooba Studios &#187; JavaScript</title>
	<atom:link href="http://www.hooba.ca/blog/categorie/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hooba.ca/blog</link>
	<description></description>
	<lastBuildDate>Sun, 11 Jul 2010 13:51:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Échange d&#8217;objets JSON entre PHP et JavaScript, facile grâce à jQuery</title>
		<link>http://www.hooba.ca/blog/2008/echange-dobjets-json-entre-php-et-javascript-facile-grace-a-jquery/</link>
		<comments>http://www.hooba.ca/blog/2008/echange-dobjets-json-entre-php-et-javascript-facile-grace-a-jquery/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 19:28:19 +0000</pubDate>
		<dc:creator>Antoine Leclair</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.hooba.ca/blog/?p=105</guid>
		<description><![CDATA[Sites internet AJAX avec jQuery
jQuery fourni un moyen efficace de sélectionner des éléments du DOM et de les affecter, mais il fourni aussi un moyen très simple de faire de l&#8217;échange AJAX. Il fourni des fonctions comme load(), $.get(), $.post(), $.ajax() et, mon sujet d&#8217;aujourd&#8217;hui, $.getJSON().
Cette fonction permet de faire une requête en envoyant un [...]]]></description>
			<content:encoded><![CDATA[<h3>Sites internet AJAX avec jQuery</h3>
<p>jQuery fourni un moyen efficace de sélectionner des éléments du DOM et de les affecter, mais il fourni aussi un moyen très simple de faire de l&#8217;échange AJAX. Il fourni des fonctions comme <code>load()</code>, <code>$.get()</code>, <code>$.post()</code>, <code>$.ajax()</code> et, mon sujet d&#8217;aujourd&#8217;hui, <code>$.getJSON()</code>.</p>
<p>Cette fonction permet de faire une requête en envoyant un objet JSON, qui sera traduit en paramètres GET, et de reçevoir en réponse un objet JSON qui sera automatiquement traité.<span id="more-105"></span></p>
<h3>Exemple</h3>
<p>Pour démontrer le fonctionnement, je vous montre 3 fichiers. Le fichier HTML (un extrait):</p>
<pre><code>&lt;h2 id="nom"&gt;&lt;/h2&gt;
&lt;p id="prix"&gt;&lt;/p&gt;
&lt;p id="description"&gt;&lt;/p&gt;</code></pre>
<p>Le fichier Javascript:</p>
<pre><code>$(function(){

  // lorsque le DOM est chargé, cette fonction sera exécutée

  $.getJSON("handler.php",  // le fichier qui recevera la requête
    {"categorie": "electronique", "produit": 3},  // les paramètres
    function(data){  // la fonction qui traitera l'objet reçu
      $("#nom").html(data.nom);
      $("#prix").html(data.prix);
      $("#description").html(data.description);
  });
});</code></pre>
<p>Le fichier PHP (<code>handler.php</code> dans ce cas):</p>
<pre><code>&lt;?php
  // ...
  // code qui utilise $_GET['categorie'] et $_GET['produit']
  // pour ses requêtes de base de donnée
  // ...

  $reponse['nom'] = $nom;
  $reponse['prix'] = $prix;
  $reponse['description'] = $description;

  // on a notre objet $reponse (un array en fait)
  // reste juste à l'encoder en JSON et l'envoyer

  header('Content-Type: application/json');
  echo json_encode($reponse);
?&gt;
</code></pre>
<h3>Ce qui se produit</h3>
<p>Lorsque le DOM de la page est chargé, jQuery envoie une requête à <code>hanlder.php</code> en arrière plan. La requête est un <code>GET</code>, donc l&#8217;URL réel demandé sera:</p>
<pre><code>handler.php?categorie=electronique&#038;produit=3</code></pre>
<p>Le fichier <code>handler.php</code> reçoit la requête, fait les traitement nécessaire et crée un objet prêt à être envoyé. Lorsqu&#8217;il a terminé de créé son objet à envoyer, il signifit dans le header HTTP qu&#8217;il envoie une réponse JSON. Il envoie ensuite l&#8217;objet qu&#8217;il a traduit en JSON. Le script JavaScript attendait la réponse avec la fonction qui avait été passée en paramètre à <code>$.getJSON()</code>. L&#8217;objet est donc traité et on peut s&#8217;en servir à notre guise (dans ce cas, on affiche les informations du produit demandé).</p>
<h3>Encore une fois, jQuery faclilite la conception</h3>
<p>C&#8217;était donc une raison de plus d&#8217;aimer jQuery (je vous assure qu&#8217;il y en a plein d&#8217;autres là d&#8217;où elles viennent).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hooba.ca/blog/2008/echange-dobjets-json-entre-php-et-javascript-facile-grace-a-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction à jQuery</title>
		<link>http://www.hooba.ca/blog/2008/introduction-a-jquery/</link>
		<comments>http://www.hooba.ca/blog/2008/introduction-a-jquery/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 16:29:00 +0000</pubDate>
		<dc:creator>Antoine Leclair</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.hooba.ca/blog/?p=125</guid>
		<description><![CDATA[Vous devez trouver que je fais beaucoup d&#8217;articles &#171;&#160;Introduction à &#8230;&#160;&#187;! Je veux simplement m&#8217;assurer que tout le monde sait au moins de quoi je parle avant d&#8217;aller plus loin.
Libraire JavaScript
jQuery est une librairie JavaScript légère et de plus en plus populaire. Il couvre, entre autres, la modification du DOM, avec ou sans animation, la [...]]]></description>
			<content:encoded><![CDATA[<p>Vous devez trouver que je fais beaucoup d&#8217;articles &laquo;&nbsp;Introduction à &#8230;&nbsp;&raquo;! Je veux simplement m&#8217;assurer que tout le monde sait au moins de quoi je parle avant d&#8217;aller plus loin.</p>
<h3>Libraire JavaScript</h3>
<p>jQuery est une librairie JavaScript légère et de plus en plus populaire. Il couvre, entre autres, la modification du DOM, avec ou sans animation, la gestion des évènements et le AJAX. Il ne pèse que 15Kb lorsque gzippée par le serveur. Même Microsoft est en train de l&#8217;intégrer dans sa suite Visual Studio !<span id="more-125"></span></p>
<h3>Avantages d&#8217;utiliser jQuery</h3>
<p>Pourquoi utiliser une librairie JavaScript alors qu&#8217;on pourrait tout coder à la main? Il y a plusieurs bonnes raisons, et je n&#8217;en n&#8217;énumererai que quelques unes.</p>
<p>Premièrement, c&#8217;est beaucoup plus rapide de programmer une fonctionnalité avec jQuery que de l&#8217;écrire à partir de rien. Il permet donc de rehausser la valeur de vos projets de conception web en diminuant le temps consacré ou bien en vous permettant d&#8217;implémenter des fonctionnalités plus poussées.</p>
<p>Ensuite, il est conçu pour fonctionner dans tous les navigateurs récents (ainsi qu&#8217;Internet Explorer 6). Si vous programmez souvent en JavaScript vous savez à quel point chaque navigateur offre une version différente de JavaScript et à quel point ça peut rendre le code complexe et illisible.</p>
<p>Aussi, le fait d&#8217;utiliser une librairie aussi poussée peut vous éviter d&#8217;avoir recours à Flash, qui est une technologie propriétaire. Flash est, encore aujourd&#8217;hui, un &laquo;&nbsp;gâcheur de <em>party</em>&nbsp;&raquo; lorsque le site est visionné à partir d&#8217;un téléphone.</p>
<h3>Télécharger jQuery</h3>
<p>Allez chercher le fichier JavaScript de production sur <a href="http://jquery.com/">le site officiel de jQuery</a>. Ensuite, il suffit de l&#8217;insérer dans votre <code>&lt;head&gt;</code> comme avec un autre script normal:</p>
<pre><code>&lt;script type="text/javascript" src="jquery-1.2.6.min.js"&gt;&lt;/script&gt;</code></pre>
<h3>Utilisation de base</h3>
<p>Dans jQuery, il y a la fonction <code>$</code> et le namespace <code>$</code> qui contient toutes les autres fonctions.</p>
<p>La fonction <code>$</code> a plusieurs utilitées différentes dépendemment des paramètres qu&#8217;on lui passe. Si on lui passe une fonction en paramètre, jQuery exécutera cette fonction lorsque le DOM sera chargé (sans pour autant attendre que toutes les images soient chargées). Exemple:</p>
<pre><code>$(function(){ /* faire quelque chose */ });</code></pre>
<p>Si on lui passe une chaîne de caractère qui contient un sélecteur CSS, il va retourner l&#8217;ensemble des noeuds qui répondent aux conditions. Exemple (qui en soit ne sert à rien):</p>
<pre><code>$('ul#nav');</code></pre>
<p>On peut affecter cet ensemble de noeuds avec des méthodes de jQuery. Si on voulait faire disparaître comme un panneau à glissière l&#8217;ensemble retourné de l&#8217;exemple précédent, on ferait:</p>
<pre><code>$('ul#nav').slideUp('fast');</code></pre>
<p>La fonction <code>$</code> peut également recevoir du code HTML en paramètre. Elle créera alors un noeud (<em>DOM element</em>). Encore une fois, employé seul, ça ne sert pas à grand chose, mais on pourra utiliser ce noeud ailleurs. Exemple:</p>
<pre><code>$("&lt;li&gt;déconnexion&lt;/li&gt;").appendTo("ul#nav");</code></pre>
<p>Le namespace $ contient les fonctions qui ne sont pas nécessairement attachées à un noeud. Il y a entre autres certaines fonctions AJAX et les fonctions utilitaires (<em>utilities</em>). Exemple:</p>
<pre><code>$.post('/handler.php',
  {'action': 'achat', 'produit': 434},
  function(data){/* faire quelque chose */}
);</code></pre>
<p>La fonction et le namespace <code>$</code> sont en fait des racourcis vers la fonction  et le namepsace <code>jQuery</code>. Les deux lignes de code suivantes sont donc équivalentes:</p>
<pre><code>$('ul#nav').slideUp('fast');
jQuery('ul#nav').slideUp('fast');</code></pre>
<p>Le racourci <code>$</code> a été ajouté pour accélerer le codage. Par contre, certaines autres librairies JavaScript l&#8217;utlisent aussi. Si vous faite la conception d&#8217;un site internet qui utilise plusieurs librairies, vous pouvez dire à jQuery de libérer <code>$</code>; il suffit d&#8217;utiliser la fonction <code>$.noConflict()</code>.</p>
<h3>Gestion des évènements</h3>
<p>Vous pouvez attacher des évènements à des ensembles de noeuds retournés par la fonction <code>$</code>. L&#8217;avantage d&#8217;utiliser jQuery pour gérer les évènements est, encore une fois, qu&#8217;il armonise la syntaxe pour ne plus avoir à se soucier des différences entre les navigateurs. Pour associer une fonctionnalité à un clic, on utilise <code>.click(fonction)</code>. Pour générer un clic, on peut aussi utiliser <code>.click()</code> (sans paramètre). Exemple:</p>
<pre><code>$('#bouton').click(function(){/* faire quelque chose */});</code></pre>
<h3>Exemple</h3>
<p>Avant de conclure, on va regrouper tout ce qu&#8217;on vient de voir pour faire un petit exemple. Lorsque le DOM est chargé, on va donner vie à un bouton qui permet de cacher et afficher la navigation.</p>
<pre><code>$(function(){ // exécuté lorsque "DOM ready"
  $('#bouton').click(function(){
    $('ul#nav').slideToggle('fast');
  });
});</code></pre>
<h3>Résumé</h3>
<p>jQuery est une librairie légère dont le coeur ne comprends pas une tonne de fonctions. Cette caractéristique rend son apprentissage plutôt rapide et <a href="http://docs.jquery.com/">sa documentation</a> très concise. Beaucoup de <em>plugins</em> sont disponibles et il est facile d&#8217;en créer soi-même. Elle est donc une librarie de choix pour la conception de sites internet &laquo;&nbsp;web 2.0&#8243;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hooba.ca/blog/2008/introduction-a-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Encore un mot sur les variables en JavaScript</title>
		<link>http://www.hooba.ca/blog/2008/encore-un-mot-sur-les-variables-en-javascript/</link>
		<comments>http://www.hooba.ca/blog/2008/encore-un-mot-sur-les-variables-en-javascript/#comments</comments>
		<pubDate>Sun, 09 Nov 2008 18:13:20 +0000</pubDate>
		<dc:creator>Antoine Leclair</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.hooba.ca/blog/?p=96</guid>
		<description><![CDATA[Dans un précédent article, je parlais de la portée des variables en JavaScript. Je veux revenir sur les variables globales pour ajouter quelques détails.
Quand on déclare une variable en dehors de tout objet ou fonction, une chose qui peut surprendre, c&#8217;est qu&#8217;on assigne en fait cette variable comme étant une propriété de window. Les notations [...]]]></description>
			<content:encoded><![CDATA[<p>Dans un précédent article, je parlais de <a title="La portée des variables en JavaScript" href="http://www.hooba.ca/blog/2008/portee-des-variables-en-javascript/">la portée des variables en JavaScript</a>. Je veux revenir sur les variables globales pour ajouter quelques détails.</p>
<p>Quand on déclare une variable en dehors de tout objet ou fonction, une chose qui peut surprendre, c&#8217;est qu&#8217;on assigne en fait cette variable comme étant une propriété de <code>window</code>. Les notations suivantes, en dehors d&#8217;une fonction ou d&#8217;un objet, sont donc équivalentes:</p>
<pre><code>var variable = 40;
variable = 40;
window.variable = 40;
</code></pre>
<p>On peut même pousser encore un peu plus loin et dire la même chose des fonctions.<span id="more-96"></span> Quand on déclare une fonction, on assigne en fait la fonction à son nom. Et son nom est une propriété de <code>window</code>. Voici un peu de code pour rendre plus clair; encore une fois, les notations suivantes sont équivalentes:</p>
<pre><code>function maFonction(){ alert("Tada!"); }
maFonction = function(){ alert("Tada!"); }
window.maFonction = function(){ alert("Tada!"); }
</code></pre>
<p>L&#8217;utilitée de savoir ça se révèle quand on veut passer des fonctions en paramètre à d&#8217;autres fonctions (ce qu&#8217;on appelle générallement <em>callback function</em>). On pourrait écrire:</p>
<pre><code>function maFonction(){ alert("Tada!"); }
setTimeout(maFonction, 1000);
</code></pre>
<p>Mais, si on veut, on peut ne pas assigner la fonction à <code>window</code> et simplement passer le code en paramètre:</p>
<pre><code>setTimeout(function(){ alert("Tada!"); }, 1000);
</code></pre>
<p>Ce genre de notation est très utilisée dans les libraries comme jQuery.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hooba.ca/blog/2008/encore-un-mot-sur-les-variables-en-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Portée des variables en JavaScript</title>
		<link>http://www.hooba.ca/blog/2008/portee-des-variables-en-javascript/</link>
		<comments>http://www.hooba.ca/blog/2008/portee-des-variables-en-javascript/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 21:52:13 +0000</pubDate>
		<dc:creator>Antoine Leclair</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.hooba.ca/blog/?p=5</guid>
		<description><![CDATA[Les variables en JavaScript, comme dans la plupart des langages de programmation, ont une portée (variable scope). De la manière que ça fonctionne en JavaScript, elles sont soit globales ou locales.
Variables globales
Les variables globales sont accessibles et modifiables de partout dans le code. On n&#8217;a pas à les passer en paramètre pour les lire ou [...]]]></description>
			<content:encoded><![CDATA[<p>Les variables en JavaScript, comme dans la plupart des langages de programmation, ont une portée (<em>variable scope</em>). De la manière que ça fonctionne en JavaScript, elles sont soit globales ou locales.</p>
<h3>Variables globales</h3>
<p>Les variables globales sont accessibles et modifiables de partout dans le code. On n&#8217;a pas à les passer en paramètre pour les lire ou modifier à l&#8217;intérieur de fonctions. Pour déclarer des variables globales, on n&#8217;a qu&#8217;à la déclarer avec <code>var</code> en dehors d&#8217;une fonction. Sinon, on peut aussi la déclarer sans <code>var</code> à l&#8217;intérieur d&#8217;une fonction. Sans vouloir trop pousser, je crois que la recommandation est de toujours déclarer les variables avec <code>var</code>. Il faudrait donc s&#8217;assurer de déclarer la variable en dehors de toute fonction avant de l&#8217;utiliser de manière globale dans une fonction.<br />
<span id="more-5"></span></p>
<h3>Variables locales</h3>
<p>Les variables locales sont accessibles et modifiables uniquement à l&#8217;intérieur de la fonction dans laquelle elles sont déclarées. Pour les déclarer, il suffit de le faire avec <code>var</code> à l&#8217;intérieur de la fonction. Elles seront automatiquement détruite à la fin de l&#8217;exécution de la fonction. Ce type de variable est utile pour les algorithmes propres à la fonction. Ça évite d&#8217;exposer le fonctionnement interne d&#8217;une fonction au reste du monde afin d&#8217;aider à la modularité du code. Aussi, les variables locales évite une surpopulation de variables qui pourraient entrainer des collisions de nom de variable.</p>
<h3>Variables statiques</h3>
<p>Les programmeurs familiers avec d&#8217;autres langages pourraient s&#8217;attendre aux variables statiques. Ces variables sont comme les variables locales, i.e. disponibles uniquement à l&#8217;intérieur de la fonction, mais leur valeur ne se perd pas entre chaque appel de la fonction. Ce type de portée n&#8217;existe pas en JavaScript.</p>
<h3>Exemple</h3>
<pre><code>var aaa = 8;    // variable globale

alert("aaa: " + aaa);    // affiche "aaa: 8"

fonctionUn();    // affiche "aaa: 11" et "bbb: 10"

alert("aaa: " + aaa);    // affiche "aaa: 11"

alert("bbb: " + bbb);    // erreur, b n'existe pas ici

fonctionDeux();    // affiche "aaa: 12"

alert("aaa: " + aaa);    // affiche "aaa: 11"

function fonctionUn(){
  aaa = 11;
  alert("aaa: " + aaa);    // aaa est globale
  var bbb = 10;    // variable locale
  alert("bbb: " + bbb);
}

function fonctionDeux(){
  var aaa = 12;    // variable locale
    // la version local sera utilisée
    // la version globale reste intouchée
  alert("aaa: " + aaa);
}
</code></pre>
<h3>Résumé</h3>
<p>En bref, lorsqu&#8217;une variable ne sert qu&#8217;au fonctionnement interne d&#8217;une fonction, on devrait la déclarer avec <code>var</code> à l&#8217;intérieur de la fonction afin qu&#8217;elle soit détruite à la fin de la fonction. Si la variable est créée lors de l&#8217;appel de la fonction, et sera encore utile par la suite, on devrait la retourner avec <code>return</code>. Si elle est nécessaire tout au long du script, on devrait la déclarer avec <code>var</code> en dehors des fonctions, au début du script ou à un autre endroit approprié.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hooba.ca/blog/2008/portee-des-variables-en-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
