AJAX,JSON, JQuery

advertisement
CGI and AJAX
CS-260
Dick Steflik
CGI
• Common Gateway Interface
– A set of standards that define how information
is exchanged between a web server and a
ccustom script
– CGI Spec is maintained by NCSA (National
Center for Supercomputing Applications
– A standard for external gateway programs to
interface with information servers such as
HTTP servers
• When running a python program as a CGI
program sysin , sysout and syserr are
redefined to :
– sysin: instead of coming from the keyboard is
the incoming data stream from the tcpip
socket (the remote host, the user’s browser).
This will actually be handled via CGI
Environment variables
– sysout: instead of printing to the screen prints
to the tcpip outgoing data stream, to the
user’s browser)
Input
• Input for your CGI program will be handled
by the HTTP server (Apache) and will be
placed in a set of HTTP environment
variables, and in a special data structure
called FieldStorage.
FieldStorage
• Methods:
– add_field(name,value
– clear()
– get(name, default)
– getfirst(name[,default])
– getlist(name)
– has_key(name)
– Items()
– keys()
What is AJAX
• Asynchronous Javascript And XML
– allows the updating of a web page without
doing a page reload
• creates much nicer user experience
• AJAX is not really a technology by itself
– combination of Javascript, XML and some
server-side scripting to create the XML
• server-side scripting could be done in PHP, .NET,
Java Servlet or Java Server Page (JSP)
General Technique
Server-side
Web Page
Script
requests server-side script to be run
info parsed from
XML and used to
update DOM by
Javascript
script run, XML
created
XML document returned
Sending a request for a URL
• xmlHttpRequest Object
– mozilla
• objXMLHttp=new XMLHttpRequest()
– IE
• objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
• create the URL
• tell the browser the name of the function to
handle the response
• send the url to the server
example
var url="servertime.php"
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
The server-side script
• creates a “well formed XML document”
• sets the content type to text/xml
• can be written in any language
– Python
– PHP
– ASP
– .NET
– Java
– JSP
sample PHP script
<?
// a time document
header("Content-type: text/xml");
print("<time>");
print("<currtime>".time()."</currtime>");
print("</time>");
?>
stateChange
• when the document is received by the
browser control is transferred to where
ever we told it to
– xmlHttp.onreadystatechange=stateChanged
– in this case the function named stateChanged
stateChanged
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
//update the DOM with the data
document.getElementById("time").innerHTML=xmlHttp.responseText
}
}
XMLHttpRequest Object
• Methods:
– abort() - stop the current request
– getAllResponseHeaders - Returns complete
set of headers (labels and values) as a string
– getResponseHeader(:headerLabel”) – returns
the string value of the requested header field
– open(“method”,”URL”) sets a pending request
– send(content) – transmits the request
– setRequestHeader(“label”,”value”) – sets
label/value in the header
(continued)
• Properties
– onreadystatechange - event handler to use
– readyState (0-uninitialized, 1-loading, 2-loaded, 3interactive, 4- complete)
– responseText – string version of the data returned
– responseXML – DOM compatible document object
returned by server
– status – http response header code (200 – good)
– statusText – string message of status code
Popular Ajax Frameworks
• Prototype
– http://www.prototypejs.org/
– free
• Script.aculo.us
– http://script.aculo.us/
– Used with the Prototype Framework, mainly for
animations and interface development
– free
• Backbase
– Enterprise Ajax Framework
– not free
JSON
• JavaScript Object Notation
– Text based open standard for human
readable data interchange
• Often used in AJAX interchange
techniques
• RFC-4627 (
http://www.ietf.org/rfc/rfc4627.txt )
• An alternative to using XML for AJAX
Sample JSON Object
{
"firstName": "John",
"lastName": "Smith",
"age": 25,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021 },
"phoneNumbers": [
{
"type": "home",
"number": "212 555-1234“
},
{
"type": "fax",
"number": "646 555-4567“
}
]
}
var my_JSON_object = {};
var http_request = new XMLHttpRequest();
http_request.open("GET", url, true);
http_request.onreadystatechange = function () {
var done = 4, ok = 200;
if (http_request.readyState == done && http_request.status == ok) {
my_JSON_object = JSON.parse(http_request.responseText);
}
};
http_request.send(null);
My_JSON_object.firstname=“John”;
My_JSON_object.lastname=“Smith”;
My_JSON_object.age=25;
My_JSON_object.address.streetaddress=“21 2nd Street”;
My_JSON_object.address.city=“New York”;
.
.
.
.
.
jQuery
• Multi-browser javascript library to simplify
client-side scripting.
• Used by over 55% of the top 10000 most
visited web sites
• Goal is to make it easier to navigate html
documents, select DOM elements, create
animations, handle events and develop
AJAX applications.
jQuery
• Features:
–
–
–
–
–
–
–
–
–
DOM element selection
DOM traversal and modification (including CSS)
DOM manipulation based on CSS selectors
Events
AJAX
Extensibility via plug-ins
Utilities (user-agent info and feature detection)
Compatibility methods for compatibility with older browsers
Multi-browser (not cross browser) support
• To use you must include jquery.js (available from
jquery.com) via the src attribute of the html <script) tag
Feature Detection
// check if jQuery is included, if not then include it
if(!(window.jQuery && window.jQuery.fn.jquery == '1.6.2')) {
var s = document.createElement('script');
s.setAttribute('src', ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js');
s.setAttribute('type', 'text/javascript');
document.getElementsByTagName('head')[0].appendChild(s);
}
jQuery/AJAX
$.ajax({
type: "POST",
url: "example.php",
data: "name=John&location=Boston“
}).done( function(msg) {
alert( "Data Saved: " + msg );
}).fail( function( xmlHttpRequest, statusText, errorThrown ) {
alert(
"Your form submission failed.\n\n"
+ "XML Http Request: " + JSON.stringify( xmlHttpRequest )
+ ",\nStatus Text: " + statusText
+ ",\nError Thrown: " + errorThrown );
});
Download