Remote JavaScript

The primary reason is that the round trip time required to submit a form and then download the response is often inconvenient. The user experience is much improved if, instead of clicking a Submit button and watching the screen go blank and then be replaced by the response of a server-side program, a user can click a button and have the page be updated without a visible form submission. To the user, the page would behave more like an application than a Web page. 

There are other advantages as well. If communication with a server can be done behind the scenes instead of using form submissions or clicking on links, the developer can carry out more complicated tasks requiring multiple server requests at once. The ability to use remote JavaScript also means that tasks that previously required an ActiveX object or Java applet can be implemented with script. This is a tremendous timesaver for the developer and also reduces the complexity of debugging significantly. 

The abstraction that remote JavaScript brings to life is the remote procedure call. A remote procedure call (RPC) is a function that executes on a remote machine, in this case a Web server. The client, in this case our browser using JavaScript, passes arguments to the “function” it wishes to call via an HTTP request; the server executes the specified function, often implemented as a CGI program or server-side script in PHP or a similar language, and returns the results as the body of the HTTP response. It’s important to remember that while JavaScript is used to make the function call and often to handle the return value, the function itself executes on the server, and therefore can be implemented as a CGI, PHP script, Java servlet, or using any other technology a Web server might have available.

By far the most common vehicle used for one-way communication is images. You don’t even have to use <<img>>s embedded in the page; in fact, it’s preferable not to. Since you don’t intend to actually download or display an image, you can create an Image object, use it, and then throw it away. Consider the following document fragment:
<<script type="text/javascript">>

var commandURL = "http://demos.javascriptref.com/setrating.php?";

function sendURL(url) 

{

  var img = new Image();

  img.src = url;

}

function sendRating(productid, rating, user) 

{

  var params = "productid=" + productid;

  params += "&rating=" + rating;

  params += "&user=" + user;

  sendURL(commandURL + params);

  return false;

}

<</script>>

<<!-- ... -->>

Rate this item:

<<form action="#" method="get">>

  <<input type="button" value="Horrible!" onclick="return sendRating(2158, 1,

 'Bob');" />>

  <<input type="button" value="OK" onclick="return sendRating(2158, 2,

 'Bob');" />>

  <<input type="button" value="Great!" onclick="return sendRating(2158, 3,

 'Bob');" />>

<</form>>

Note 
Don’t think that because we are using form buttons here that this is a traditional style communication. In fact, we could have used just about any object we could click by attaching an onclick, including links (<<a>>) or even structural elements like <<div>> or <<p>>, but we used form buttons since the user would feel they were clickable!