Beruflich Dokumente
Kultur Dokumente
JavaScript
M4103C - Programmation Web – client riche
● AJAX
2ème année - S4, cours - 3/5
2014-2015 ● JSON
● DOM
Marcel Bosc
1ère partie
Exemple : Google
page non rechargée !
Ajax suggestions
suggestions
internet
client google.fr
« javas »
navigateur
serveur web
« javascript »
« javascript array»
BDD
« javascript subs...»
Exemple : commentaires Exemple : commentaires
page non rechargée ! page non rechargée !
affichage
affichage // tri
tri commentaires
commentaires
j'aime
j'aime
internet internet
client youtube.com client youtube.com
j'aime com. n°1234 com. triés
navigateur navigateur
serveur web serveur web
$.get("http://exemple.org/commentaire",
{ id: 5678 }, appelée
appelée àà la
la réception
réception
function(reponse) de
de la
la réponse
réponse dudu serveur
serveur
{
JavaScript Asynchrone // afficher com.
Requête non bloquante à partir du JavaScript, });
au serveur, sans recharger la page.
Chronologie client / serveur Exemple : suggestion
client google.fr
navigateur serveur web
1 https://google.fr
3 <html>...</html> générer page web 2
4 affichage page
<div>
6 « javas » <input id="recherche" type="text" />
5 « javas » tapé chercher « javas » 7 <button>chercher</button>
8 liste suggestions </div>
9 mise à jour <ul id="suggestions">
affichage BDD <li></li>
sans recharger </ul>
div ul
id="suggestions"
input button li li li
internet
id="recherche"
$_GET['mot']
http://exemple.org/suggestion.php?mot=a
JS JS
0 $('#recherche').keyup(function(e) 0 $('#recherche').keyup(function(e)
1 { 1 {
2 $.get('http://exemple.org/suggestion.php', 2 $.get('http://exemple.org/suggestion.php',
serveur
3 {mot: $('#recherche').val()}, 3 {mot: $('#recherche').val()},
4 function(reponse) <li>abricot</li> 4 function(reponse)
5 { <li>arbre </li> 5 {
6 $('#suggestions').html(reponse); <li>amis </li> 6 $('#suggestions').html(reponse);
7 $('#suggestions').show(); 7 $('#suggestions').show();
8 }); 8 });
9 }); 9 });
Suggestion : chronologie JS Suggestion : PHP
http://exemple.org/suggestion.php?mot=a
A B
attente attente
0 2 réponse 6
keyup ! 3 0 $mot=$_GET['mot'];
9 reçue ! 7 1 $sql="SELECT mot FROM mots WHERE mot LIKE '?%'";
8 $suggestions=database_list($sql,$mot);
2
3 $resultat=''; BDD
serveur serveur 4 foreach($suggestions as $suggestion)
JS 5 {
6 $resultat.='<li>'.htmlentities($suggestion).'</li>';
0 $('#recherche').keyup(function(e) }
A 7
1 { echo $resultat;
$.get('http://exemple.org/suggestion.php', 8
2
3 {mot: $('#recherche').val()},
4 function(reponse)
5 { B <li>abricot</li>
6 $('#suggestions').html(reponse); <li>arbre </li>
7 $('#suggestions').show(); <li>amis </li>
8 });
9 });
http://exemple.org/recherche.php?mot=jeudi http://exemple.org/payer.php
Entêtes http
Exemples: Contre-exemples: Contre-exemples: Exemples:
modifier l'affichage payer en ligne modifier l'affichage payer en ligne
faire une recherche ajouter un commentaire faire une recherche ajouter un commentaire
sur un forum sur un forum
Exemple : .post() 2ème partie
JSON
JS
0 $('.jaime').click(function(e)
1 {
2 $.post('http://exemple.org/jaime.php',
3 {nbCom: $(this).parent().attr('id')},
4 function(reponse)
5 {
6 ...
7 });
8 });
9
client exemple.org
très utilisé !
navigateur
serveur web
texte beaucoup de langages PHP
{
nom: "Saidi",
prenom: "Driss",
id: 1234,
age: 25
}
JSON : exemples PHP: json_encode()
Objet simple Objet complexe PHP
{ { $user=[
nom: "Saidi", nom: "Collège Grange du Bois" 'nom' =>'Saidi',
prenom: "Driss", ville: 'prenom'=>'Driss',
id: 1234, { 'id' =>1234,
age: 25 nom: "Savigny-le-Temple", ];
} "nom-court": "Savigny", $user['age']=25;
code : 77176 header('Content-Type: application/json');
}, echo json_encode($user);
adresse: "2 av. Victor..."
}
Tableau simple Tableau d'objets JSON
[ {
[ nom: "Saidi",
{ nom: "Wang",
"Fraise", prenom: "Driss",
id : 4321 },
"Chocolat", id: 1234,
{ nom: "Amara",
"vanille" age: 25
id : 5612 }
] }
]
DOM
Frameworks
Chrome 48%
jQuery DOM
Simplicité Performance chargement Internet Explorer 18%
Comptabilité navigateurs Performance exécution v.6, ... v.11
Propriétés Mozilla Firefox 17%
Text Node
Cookies
safari 5%
Env. particuliers
Mobile 35%
window
Un titre
un paragraphe
HTMLElement
document
MDN : developer.mozilla.org
title h1 p p
document <body> body
document.body <h1>Ceci est un titre</h1>
document.getElementById() <p id="p1">Un paragraphe</p>
document.createElement() <p>2e paragraphe
h1 p p
document.cookie <img id="photo" src="ex.png"...
id="p1"
... </p>
</body> img
id="photo"
document.createElement() node.appendChild()
DOM
DOM
var d=document.createElement('p');
var d=document.createElement('p');
pas encore dans arbre DOM ! document.body.appendChild(d);
jQuery jQuery
var j=$('<p></p>'); var j=$('<p></p>');
$('body').append(j);
pas encore dans arbre DOM !
body body
p
h1 p p h1 p p p
id="p1" id="p1"
img img
id="photo" id="photo"
Text
d = un élément DOM Node CharacterData HTMLHeadElement
Comment
var d=document.getElementById('photo');
HTMLBodyElement
Element HTMLElement
DOM jQuery jQuery DOM HTMLParagraphElement
$(d) $('#photo')[0]
body element.addEventListener()
Chercher éléments
h1 p
element.getElementsByClassName()
Text Text a Text strong element.getElementsByTagName()
Ceci est un titre Un para... avec un vers une... suivants element.querySelector()
Text Text element.querySelectorAll()
lien sont importants
element.className node.parentNode
DOM
DOM
d.className "intro important"
var d=document.getElementById('photo').parentNode;
d.className="conclusion secondaire"
jQuery
j.attr('class')
jQuery
j.hasClass("intro") var j=$('#photo').parent();
j.addClass("xyz")
j.removeClass("intro") body
jQuery jQuery
var liste=$('body').children(); $('#photo').click(function(){ ... });
liste.each(function()
{
// ... this ...
}); body
body h1 p p
children / childNodes click
id="p1"
img
Text h1 p p
id="photo"