On est donc dans un mode statique:
Le navigateur ne fait rien de plus qu'afficher du contenu
http://www.domaine.com?param1=val1¶m2=val2¶m3=val3
Page bloquée en attendant les résultats
Pas de garantie dans l'ordre d'arrivée du résultat des requêtes
Access-Control-Allow-Origin
JSONP
(mais pas recommandé)
someDOMelement.addEventListener("click",function(e){
// what to do on a click --> THIS IS A CALLBACK FUNCTION
},false);
Problème: peu lisible en cas de chainage. Imaginons
appelAJAXgeoLoc(gps, function(ville) {
appelAJAXmeteoVille(ville, function(meteo) {
affiche(meteo, function() { console.log('OK') })
});
})
Une promesse est un objet (Promise) qui représente la complétion ou l'échec d'une opération asynchrone.
C'est à lui qu'on attache des callbacks plutôt que de passer ces callbacks à une fonction.
appelAJAXgeoLoc(gps) : quand on
lui applique la méthode .then(fun)
, exécute la
promesse et donne le résultat à fun
.
appelAJAXgeoLoc(gps).then(function(ville) {
return appelAJAXmeteoVille(ville);
})
.then(function(meteo) {
return affiche(meteo);
})
.then(function() {
console.log('OK');
})
.catch(failureCallback);
appelAJAXgeoLoc(gps)
.then(ville => appelAJAXmeteoVille(ville))
.then(meteo => affiche(meteo))
.then(() => { console.log('OK'); })
.catch(failureCallback);
appelAJAXgeoLoc(gps)
.then(appelAJAXmeteoVille)
.then(affiche)
.then(() => { console.log('OK'); })
.catch(failureCallback);
L'API Fetch fournit une interface JavaScript à base de promesses pour les requêtes et les réponses HTTPs.
Ce genre de fonctionnalité était auparavant réalisé avec XMLHttpRequest en Javscript pur.
Une alternative consiste à utiliser la librairie jQuery.
Requête avec fetch():
const myImage = document.querySelector('img');
fetch('flowers.jpg')
.then(function(response) {
return response.blob();
})
.then(function(myBlob) {
const objectURL = URL.createObjectURL(myBlob);
myImage.src = objectURL;
});
De la classe Response. Méthodes interessantes:
besoin d'échanger des données entre acteurs
D'où la nécessité d'un format de structuration universel
Généralisation de HTML
<a></b> <!-- Non valide ! -->
<?xml version="1.0" encoding="UTF-8"?>
"http://www.w3.org/1999/xhtml"
"http://www.w3.org/1998/Math/MathML"
"http://www.w3.org/2000/svg"
"http://www.w3.org/TR/REC-rdf-syntax#"
"http://purl.org/dc"
<?xml version=”1.0”?>
<catalog>
<rdf:RDF xmlns:rdf=”http://www.w3.org/TR/REC-rdf-syntax#”>
<rdf:Description about=”http://mon-catalogue” xmlns:dc=”http://purl.org/dc”>
<dc:title>Tableaux impressionistes</dc:title>
<dc:creator>Benoît</dc:creator>
<dc:description>Liste de tableaux célèbres</dc:description>
<dc:date>2009</dc:date>
</rdf:Description>
</rdf:RDF>
<painting>
<title>Souvenir d'un jardin à Eden</title>
<artist>Van Gogh</artist>
<date>1888</date>
<description>Deux femmes regardent sur la gauche ;
une troisième travaille au jardin.</description>
</painting>
...
</catalog></code>
dc
, rdf
, svg
.
xmlns
seul. Par exemple:
<svg xmlns=”http://www.w3.org/2000/svg” width=”12cm” height=”10cm”>
<ellipse rx=”110” ry=”130”/>
<rect x=”4cm” y=”5cm” width=”3cm” height=”4cm”/>
</svg>
{
"firstName": "John",
"lastName" : "Smith",
"age" : 25,
"address" :
{
"streetAddress": "21 2nd Street",
"city" : "New York",
"state" : "NY",
"postalCode" : "10021"
},
"phoneNumber":
[
{ "type" : "home", "number": "212 555-1234" },
{ "type" : "fax", "number": "646 555-4567" }
]
}
eval()
de javascript
JSON.stringify(objet)
JSON.parse(chaine de caractères)
fetch('https://api.openweathermap.org/data/2.5/weather?q=London,uk&appid=22e21ef649526ef2b1be4db6d2b0857d&mode=json')
.then(function(response) {
return response.json();
})
.then(function(data) {
alert(data.weather[0].description)
});