Difference between revisions of "JavaScript"

From CSE330 Wiki
Jump to navigationJump to search
Line 200: Line 200:
 
</code>
 
</code>
  
=Other Resources=
+
=jQuery=
There are a number of other w3schools tutorials and references that you may find useful, including [http://www.w3schools.com/php/default.asp PHP] (note the PHP and AJAX section), [http://www.w3schools.com/htmldom/default.asp DOM], and [http://www.w3schools.com/ajax/default.asp AJAX].  Many other resources exist around the web, and you should feel free to incorporate any existing libraries or other javascript or AJAX-related tools.  For example, [http://en.wikipedia.org/wiki/JQuery jQuery], and [http://code.google.com/apis/ajaxlibs/ Google AJAX APIs]. 
 
  
Here is one example of using jQuery to do simple animations by moving an image across the browser window:
+
Here is another example of using jQuery to do simple animations by moving an image across the browser window:
  
 
<code>
 
<code>
Line 238: Line 237:
 
</pre>
 
</pre>
 
</code>
 
</code>
 +
 +
=Other Resources=
 +
There are a number of other w3schools tutorials and references that you may find useful, including [http://www.w3schools.com/php/default.asp PHP] (note the PHP and AJAX section), [http://www.w3schools.com/htmldom/default.asp DOM], [http://www.w3schools.com/ajax/default.asp AJAX], and [http://www.w3schools.com/css/default.asp CSS].  Many other resources exist around the web, and you should feel free to incorporate any existing libraries or other javascript or AJAX-related tools.  For example, the [http://code.google.com/apis/ajaxlibs/ Google AJAX APIs].

Revision as of 04:15, 24 September 2009

Javascript

Javascript is one of the most widely used scripting languages for preforming client-side functions in the web environment. That is, the javascript code is interpreted and executed in a client's web browser.. not on the web server. It is vaguely similar to Java, in that it is an object oriented language, but it was designed to be simpler for non-programmers to be able to accomplish common web processing tasks.

You should start by reading the w3schools javascript tutorial, which covers most of the important features of the language:

http://www.w3schools.com/js/default.asp

Since the javascript code runs in the web browser, you'll have to use web browser tools for all debugging. Generally speaking, if you have syntax or runtime errors in your javascript, the web browser will report nothing but not attempt to run the script. So if it appears that your code is doing nothing, then it's likely a syntax error of some sort. Fortunately, in Firefox, you can use the error console to view warnings and errors produced as javascripts are executed. Go to Tools->Error Console to access it. This is most useful for simple syntatic debugging. If you need a more serious debugger, you can use Firebug for Firefox.

Asynchronous Javascript And XML

AJAX, Asynchronous Javascript And XML, is a group of related web development techniques, standards, and technologies used on the client (web browser) side of the standard web server-client communication model. Although other languages can be used, the most common is to use javascript to send asynchronous requests to the web server in order to retrieve XML data that the javascript then uses to produce dynamic, fast, user-friendly web pages. The key idea is that a large fraction of the work happens at the web browser, and larger requests happen behind the scenes, keeping waiting times for data to come back over the network to a minimum. AJAX is generally also associated with higher-level APIs and libraries that aid in producing cleaner user interfaces for web applications.

The javascript XMLHttpRequest object is used to exchange data with the web servers without needing to reload the entire web page in the browser. This XMLHttpRequest object is now supported by all major browsers, although some browsers implement support in slightly different ways, leading to different behavior of the same code on different platforms. For this course, you should focus on supporting Firefox, but in any real production website it's very important to do validation testing using all of the major browsers including Firefox, Internet Explorer, Safari, and Opera as a minimum.

XMLHttpRequest Object

The XMLHttpRequest object handles communication with the web servers. To use it, you must first initialize a variable to be an instance of the XMLHttpRequest class.

 var xmlHttp;
 xmlHttp=new XMLHttpRequest();

Once you have an XMLHttpRequest, you can use it to send requests to a server. Initially, you need to connect to the server side page you are interested in:

xmlHttp.open("METHOD","REMOTE_URL", ASYNCRONOUS_FLAG);

where METHOD is "GET" or "POST", REMOTE_URL is the page that you are going to send requests to, and ASYNCRONOUS_FLAG is true or false to indicate whether the calls should be made asynchronously or synchronously. In asynchronous communication, the client can do other things while waiting for the server response, whereas in synchronous communication, the client blocks execution and waits until the response comes back before proceeding. Once the object has been opened, you can then use the send method to send a request to the server. Note that you do not explicitly set data fields to send, because it is contained in the URL request.

xmlHttp.send(null);

The XMLHttpRequest object has an attribute, readyState, that stores the current state of the request.

StateDescription
0The request is not initialized
1The request has been set up
2The request has been sent
3The request is in process
4The request is complete

For example, when a request is sent, the state is set to 2. Every time the state changes, javascript automatically calls a function specified by the onreadystatechange attribute. So, before calling a remote site, you should setup a new function:

xmlHttp.onreadystatechange=function()
{
  alert('state changed to '+xmlHttp.readyState);
}

This is how asynchronous requests are handled. Once you send a request, you access the response only through the onreadystatechange function. Meanwhile, your client page can be doing other things. If you are waiting for a response from the server, you should check whether the readyState is 4, corresponding to the request being completed. The server's response is returned as part of the XMLHttpRequest' responseText attribute.

xmlHttp.onreadystatechange=function()
{
  if(xmlHttp.readyState==4)
  {
    .... do some cool stuff ...
  }
}

For example, if you have following html file, server.html:

hello world

This server page just prints the hello world message.

Here is an AJAX implementation that gets the message from the server and prints it.

<html>
<body>
<script>
  var xmlHttp;
  xmlHttp=new XMLHttpRequest();

  xmlHttp.open("GET","server.html",true);

  xmlHttp.onreadystatechange=function()
  {
    if(xmlHttp.readyState==4)
    {
      var pElement=document.getElementById("msg");
      pElement.innerHTML=xmlHttp.responseText;
    }
  }

  xmlHttp.send(null);
</script>
<p id="msg"></p>
</body>
</html>

Sending Parameters

The parameters are sent either in the url (to, for example, a PHP page) or through the send function. Consider following PHP code that takes two parameters, multiplies them and return the result.

multiply.php

<? echo $_GET["x"]*$_GET["y"]; ?>

We can then use AJAX to get the multiplication of two numbers:

multiply-ajax.php

<html>
<body>
<script>
function multiply ()
{
  var xmlHttp;
  xmlHttp=new XMLHttpRequest();
  var x,y;
  x=document.getElementById("input_x").value;
  y=document.getElementById("input_y").value;
  xmlHttp.open("GET","multiply.php?x="+x+"&y="+y,true);

  xmlHttp.onreadystatechange=function()
  {
    if(xmlHttp.readyState==4)
    {
      var pElement=document.getElementById("msg");
      pElement.innerHTML=xmlHttp.responseText;
    }
  }
  xmlHttp.send(null);
}
</script>
x:<input id="input_x" type="text"/ ><br>
y:<input id="input_y" type="text"/>  
<a href="javascript:multiply();">Multiply</a>
<br>
------------------------</br>
Result: 
<p id="msg"></p>
</body>
</html>

Note that the x and y values are sent as part of the url as GET parameters. You can also send them as part of the send function, provided that your receiving page uses POST parameters.

multiply-post.php

<? echo $_POST["x"]*$_POST["y"]; ?>

multiply-ajax-post.php

<html>
<body>
<script>
function multiply()
{
  var xmlHttp;
  xmlHttp=new XMLHttpRequest();
  var x,y;
  x=document.getElementById("input_x").value;
  y=document.getElementById("input_y").value;
  var req="x="+x+"&y="+y;

  xmlHttp.open("POST","multiply-post.php",true);

  xmlHttp.onreadystatechange=function()
  {
    if(xmlHttp.readyState==4)
    {
      var pElement=document.getElementById("msg");
      pElement.innerHTML=xmlHttp.responseText;
    }
  }

  xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xmlHttp.setRequestHeader("Content-length", req.length);
  xmlHttp.setRequestHeader("Connection", "close");
  xmlHttp.send(req);
}
</script>
x:<input id="input_x" type="text"/ ><br>
y:<input id="input_y" type="text"/>  
<a href="javascript:multiply();">Multiply</a>
<br>
------------------------</br>
Result: 
<p id="msg"></p>
</body>
</html>

jQuery

Here is another example of using jQuery to do simple animations by moving an image across the browser window:

<html>                                                                  
<head>                                                                  
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>          
<script type="text/javascript">                                         
  // these are for storing target locations
  var targetLeft=0;
  var targetTop=0;
  function moveTarget()
  {
    targetLeft+=10; //increase target location
    targetTop+=10; 
    $("#target").css("top",targetTop); //move target to (top,left)
    $("#target").css("left",targetLeft); 
    if(targetLeft<200) 
    { //stop if we reached left=200
      window.setTimeout("moveTarget()",200); //set the next timer
    }
  }
  $(document).ready( function() 
  { //at the beginning create a clock timeout
    window.setTimeout("moveTarget()",200); //call this function in 200 ms.
  });
</script>                                                               
</head>                                                                 
<body>                                                                  
<!-- this is my target-->                                        
<img id="target"  src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Smiley.svg/180px-Smiley.svg.png" style="position:relative"/>
</body>                                                                 
</html>

Other Resources

There are a number of other w3schools tutorials and references that you may find useful, including PHP (note the PHP and AJAX section), DOM, AJAX, and CSS. Many other resources exist around the web, and you should feel free to incorporate any existing libraries or other javascript or AJAX-related tools. For example, the Google AJAX APIs.