560 likes | 668 Views
Web Technologies III Lecture XI – 16 th December 2008 Federico M. Facca. Web Engineering. Where are we?. Overview. Javascript for modifying HTML AJAX WRAP-UP. Something we have not seen about it: page manipulation. JavaScript FoR Modifying HTML. Hello World. <html> <body>
E N D
Web Technologies III Lecture XI – 16th December 2008 Federico M. Facca Web Engineering
Overview • Javascript for modifying HTML • AJAX • WRAP-UP
Something we have not seen about it: page manipulation JavaScriptFoR Modifying HTML
Hello World <html> <body> <script type="text/javascript"> document.write(“<h1>Hello World!</h1>"); </script> </body> </html> DOM treatment of the page
Document URL <html> <body> The URL of this document is: <script type="text/javascript"> document.write(document.URL); </script> </body> </html>
Form Validation <html> <head> <script type="text/javascript"> function validate()…(next slide) </script> </head> <body> <form action="tryjs_submitpage.htm" onsubmit="return validate()"> Name (max 10 chararcters): <input type="text" id="fname“ size="20"><br /> Age (from 1 to 100): <input type="text" id="age" size="20"><br /> E-mail: <input type="text" id="email" size="20"><br /> <input type="submit" value="Submit"> </form> </body> </html>
Form Validation (Cont.) <script type="text/javascript"> function validate() { var at=document.getElementById("email").value.indexOf("@"); var age=document.getElementById("age").value; varfname=document.getElementById("fname").value; submitOK="true"; if (fname.length>10){ alert("The name must be less than 10 characters"); submitOK="false"; } if (isNaN(age)||age<1||age>100) { alert("The age must be a number between 1 and 100"); submitOK="false"; } if (at==-1) { alert("Not a valid e-mail!"); submitOK="false"; } if (submitOK=="false") { returnfalse; } } </script> DOM Objects JavaScript Function Object Property
Introducing the “push” paradigm in Web applications Asynchronous JavaScript And XML
Where Were We Before AJAX? • Static pages give the illusion of interactivity through standard form submissions. • Form submissions result in full page loads.
So, What’s The Problem? • Many actions only manipulate small portions of the page but the entire page must be reloaded. • Server responses contain the entire page content rather than just the portion being updated. • Loading entire pages typically results in several additional HTTP requests for images, style sheets, scripts, and any other content that may be on the page.
AJAX - Asynchronous JavaScript and XML • An interface that allows for the HTTP communication without page refreshment. • Web pages are loaded into an object within the script (e.g., JavaScript) execution and integrated with the page content. • Thus, the Web page can communicate with the server without refreshing the whole page.
Why Use Ajax • Enhance user experience • Increases usability, speed, interactivity • Makes it possible to update portions of a web page without reloading the entire page • Asynchronous—user does not have to wait for server to respond
Real-Life Examples of AJAX Apps • Google maps • http://maps.google.com/ • Goolgle Suggest • http://www.google.com/webhp?complete=1&hl=en • Gmail • http://gmail.com/ • Yahoo Maps (new) • http://maps.yahoo.com/ • Many more…
Ajax Example: Google Suggest • Uses data about the overall popularity of various searches to help rankings • Does not base suggestions on an individual’s personal search history
Why Use Ajax? • Ajax applications usable on many different • Operating systems • Browsers • Computer architectures • The web standards that Ajax uses (XHTML, CSS, JavaScript, XML) are well defined, and supported by all major browsers.
How Does Ajax Work • JavaScript communicates directly with the server, using the XMLHttpRequest object (or ActiveXObject, IE 5 & 6) • Data retrieved from the server can be in a variety of formats: XML, HTML, text files
HTTP Requests: Traditional Model • Traditional JavaScript: • Make html form • use GET or POST to communicate with the server • User clicks “Submit” button to send or receive information • User waits • for the server to respond • for a new page to load with the results
Traditional Model Source: http://www.openajax.org/member/wiki/Technical_Overview_Whitepaper
Ajax web application model Source: http://www.adaptivepath.com/ideas/essays/archives/000385.php
HTTP Requests: Using Ajax • JavaScript communicates directly with the server, via the JavaScript XMLHttpRequest object (or ActiveXObject, IE 5 & 6) • With XMLHttpRequest, the web page can make a request/get a response from web server without reloading • The user can remain on the same page, not noticing that scripts request pages or send data to a server in the background
XMLHttpRequest • API that JavaScript and other web browser scripting languages use to transfer XML and other data between a web page’s client and server side • Data returned from XMLHttpRequest calls is often provided by back-end databases.
XMLHttpRequest Object History • Microsoft Internet Explorer version 5 • ActiveX object • Mozilla 1.0 added it as a native object with a compatible API. • Apple added it to Safari in version 1.2
What Technologies Does Ajax Use? • a combination of: • XHTML (or HTML) • Cascading Style Sheets (CSS) • Document Object Model manipulated using JavaScript to display and interact dynamically with the information presented • The XMLHttpRequest object to exchange data asynchronously with the web server
JavaScript • Define an object for sending HTTP requests • Initiate request • get request object • designate a response handler function • initiate a GET or POST request • send data • Handle response • wait for readyState of 4 and HTTP status of 200 • extract return text with responseText or responseXML • do something with result • E.g., use innerHTML to insert result into designated element
Ajax Fundamentals • Ajax uses a three-step process: • Request a URL from JavaScript code on the client. • Handle the URL on the server and write to the response. • After the response is complete, integrate the response into the DOM (Document Object Model). • In an Ajax request we don't refresh the entire page; instead, we update only part of the page.
The Server side • Did we reduce the load on the server? • Ajax newcomers sometimes mistakenly believe that Ajax, because it provides a more responsive user interface, reduces server-side traffic. • In fact, Ajax applications typically have more server-side traffic because each Ajax request involves a trip to the server. • Because those requests are asynchronous, however, Ajax creates the perception of a more responsive UI, though it typically does not reduce the load on the server.
So, How Does It Work? • JavaScript is used to: • Create and control instances of the XMLHttpRequest (XHR) object. • Provide handlers for responses. • Manipulate the DOM. • The XMLHttpRequest object: • Allows scripts to perform HTTP client functionality. • Supports GET and POST operations.
Launching HTTP Requests • Typically, 3 steps are required: • Construct and configure an XMLHttpRequest object • Launch the request • Process the response
Constructing an XMLHttpRequest For Mozilla: For Microsoft Explorer: var request = newXMLHttpRequest(); var request = new ActiveXObject("Microsoft.XMLHTTP");
Configuring an XMLHttpRequest request.open("method","URL",false) • method is GET, POST, etc. • URL must be in the domain of the current (or a relative URL), for security reasons • The false will be discussed later request.setRequestHeader("header","value")
Launching the Request request.send(content) • content is the posted in a POST request • content can be "null" or empty
Reading the Response request.responseText • The response as flat text request.responseXML • The response as a (DOM) Document object • Available if response Content-Type is text/XML request.status request.statusText request.getAllResponseHeaders() request.getResponseHeader("header")
An Example <html> <head> <title>Jokes</title> <script type="text/javascript"> ... 2 slides ahead ... </script> </head>
An Example (Cont.) <body onload="init(); setJoke()"> <h1>Select a Joke:</h1> <p><select onchange="setJoke(value)"> <option value="1" selected="selected">Joke 1</option> <option value="2">Joke 2</option> <option value="3">Joke 3</option> </select></p> <div id="jokediv"></div> </body> </html>
An Example (Cont.) <script type="text/javascript"> varjDiv; function init() { jDiv = document.getElementById("jokediv");} functionsetJoke(value) { request = newXMLHttpRequest(); request.open("GET","joke"+value+".txt",false); request.send(null); if(request.status==200){jDiv.innerHTML=request.responseText;} else {jDiv.innerHTML = "<i>Cannot load joke...</i>";} } </script> What if we didn’t get yet the response in this stage?
Example (Cont.) • Our examples use “false" in the third parameter of open(). • This parameter specifies whether the request should be handled asynchronously. • True means that the script continues to run after the send() method, without waiting for a response from the server.
Asynchronous Requests • Reading of a Web page can take a long time during which the browser is blocked • Solution: launch the request asynchronously • That is, the execution continues after send is called without waiting for it to complete • When the request is completed, a predefined function is called request.open("method","URL",true)
XMLHttpRequest States • The XMLHttpRequest goes through several states: • In the request configuration, you can define a function to call upon state change: 0 not initialized 1 loading 2 loaded 3 interactive 4 complete request.onreadystatechange = functionName
XMLHttpRequest States (Cont.) • Use request.readyState to get the current state of the request • Use request.abort() to stop the request
Asynchronous Example var request; function setJoke(value) { request = new XMLHttpRequest(); request.open("GET","joke"+value+".txt",true); request.onreadystatechange = updateJokeDiv; request.send(null); }
An Example (Cont.) functionupdateJokeDiv() { if(request.readyState<4) { jokeDiv.innerHTML = "<i>Loading...</i>"; return; } if(request.status==200) { jokeDiv.innerHTML = request.responseText; } else { jokeDiv.innerHTML = "<i>Cannot load joke!</i>"; } }
Integrating AJAX and XML using DOM • The next example shows how XML data can be parsed and added into the content of your page
XML+AJAX Example <html> <head><title>Country List</title> <script type="text/javascript"> … </script> </head> <body onload="init();loadCountries()"> <h1>Select a Continent:</h1>
XML+AJAX Example (Cont.) <p> <select id="continenetList“onchange="loadCountries()"> <option value="asia">Asia</option> <option value="africa">Africa</option> <option value="europe">Europe</option> </select> </p> <p><select size="10" id="countryList"></select></p> </body> </html>
XML+AJAX Example (Cont.) function init() { continents = document.getElementById("continenetList"); countries = document.getElementById("countryList"); } functionloadCountries() { varxmlURL = "countries-"+continents.value+".xml"; varrequest = newXMLHttpRequest(); request.onreadystatechange = updateCountries (); request.open("GET",xmlURL,true); request.send(null); }
XML+AJAX Example (Cont.) functionupdateCountries() { if(request.readyState==4) { while(countries.length>0){countries.remove(0);} if(request.status==200) { var names = request.responseXML.getElementsByTagName("name"); for(vari=0; i<names.length; ++i) { option = document.createElement("option");option.text=option.value= names[i].firstChild.nodeValue;countries.appendChild(option); } } } }
AJAX: Potential Drawbacks • "Back" function of browser might not work as expected • Bookmarking a particular state of the application • Navigation may be difficult • User might not notice when small parts of the page change • Search engine tracking • If user disables JavaScript • Many web analytics programs may not track Ajax actions as they do page reloads
That’s almost all for day… WRAP-up
Bibliography • Mandatory reading • W3Schools Ajax Tutorialhttp://www.w3schools.com/Ajax/Default.Asp