Development of Web Applications
Principles and Practice
Vincent Simonet, 2015-2016
Université Pierre et Marie Curie, Master Informatique, Spécialité STL
Client Technologies
Vincent Simonet, 2015-2016
Université Pierre et Marie Curie, Master Informatique, Spécialité STL
5
Today’s agenda
AJAX
AJAX Asynchronous JavaScript and XML
With AJAX, a JavaScript script can send data to, and retrieve data from, a server asynchronously (in the background) without interfering with the display and behavior of the existing page.
Despite the name, the use of XML is not required. In fact, JSON is much more popular.
AJAX call example
var xhr = new XMLHttpRequest();�xhr.open('get', 'http://example/method');� �xhr.onreadystatechange = function() {� // Ready state 4 means the request is done� if (xhr.readyState === 4) {� if (xhr.status === 200) {� alert('Success: ' + xhr.responseText);� } else {� alert('Error: ' + xhr.status);� }� }�}�
xhr.send(null);
AJAX: XML or JSON response
XML response:
xhr.responseType = "document";�xhr.responseXML.documentElement
JSON response:
xhr.responseType = "json";�eval(xhr.responseText)
(if you trust the response source!).
Same origin policy
AJAX requests can be made only to URLs of the same domain (host and port) as the page.
AJAX is hence useful for communication with the server of a web application, but not for doing calls to a third-party API.
For remote API calls, several workarounds are used:
W3C Specification
http://www.w3.org/TR/XMLHttpRequest/
http://www.w3.org/TR/XMLHttpRequest2/
JSONP
JSONP JSON with Padding
An alternative to AJAX, for requesting data from a server in a different domain.
How it works?
JSONP in practice
JSONP limitations
WebSockets
The problem
In HTTP and AJAX, all exchanges are initiated by client requests.
In some applications, it is useful to have the server pushing information to the client. E.g.:
Workaround solutions
The HTML5 solution: WebSockets
WebSocket is is a protocol providing full-duplex communications channels over a single TCP connection.
Enables a stream of messages.
Its only relationship to HTTP are:
WebSocket protocol handshake
Request:�GET /mychat HTTP/1.1�Host: server.example.com�Upgrade: websocket�Connection: Upgrade�Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==�Sec-WebSocket-Protocol: chat�Sec-WebSocket-Version: 13�Origin: http://example.com
Response:
HTTP/1.1 101 Switching Protocols�Upgrade: websocket�Connection: Upgrade�Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=�Sec-WebSocket-Protocol: chat
Client-side JavaScript API
var connection = new WebSocket('ws://.../echo', ['soap', 'xmpp']);
�connection.onopen = function () {� connection.send('Ping');
};��connection.onerror = function (error) {� console.log('WebSocket Error ' + error);�};��connection.onmessage = function (e) {� console.log('Server: ' + e.data);�};
Server-side implementations
HTML5
What is HTML5?
The 5th version of the HTML language, subsuming HTML 4.01 and XHTML 1.1
New/extended markup, and a galaxy of APIs.
Specification status
Implementation status
Source: html5test.com
Main HTML5 features
Tags in HTML5
�(non-exhaustive list)
Canvas
HTML:
<canvas id="c" width="500"� height="375"></canvas>
JavaScript:
var c_canvas = document.getElementById("c");�var context = c_canvas.getContext("2d");
for (var x = 0.5; x < 500; x += 10) {� context.moveTo(x, 0);� context.lineTo(x, 375);�}
Geo-localisation
navigator.geolocation.getCurrentPosition(� handle_success, handle_error, options);
function handle_success(position) {� var latitude = position.coords.latitude;� var longitude = position.coords.longitude;� // let's do something interesting!�}
function handle_error(error) {
alert(error.code + ': ' + error.message);
}
Geo-localisation
Improved forms
Use them!
Microdata
<article itemscope itemtype=� "http://data-vocabulary.org/Organization">� <h1 itemprop="name">Google, Inc.</h1>� <p itemprop="address" itemscope� itemtype="http://data-vocabulary.org/Address">� <span itemprop="street-address">
1600 Amphitheatre Parkway</span><br>� <span itemprop="locality">Mountain View</span>,� <span itemprop="region">CA</span>� <span itemprop="postal-code">94043</span><br>� <span itemprop="country-name">USA</span>
</p>� <p itemprop="tel">650-253-0000</p>�</article>
History manipulation
window.history.pushState(� "object or string", "Title", "/new-url");
window.history.replaceState(� "object or string", "Title", "/new-url");
window.addEventListener("popstate", function(e) {� swapPhoto(location.pathname);�});
http://diveintohtml5.info/