13 November 2006

AJAX si XMLHttpRequest


Pentru a putea face o cerere catre server de pe calculatorul personal, intai si intai, trebuie sa vedem pe ce partitie este instalat sistemul de operare (de exemplu, la mine este C:\Windows).



Verificati daca aveti folderul "inetpub" pe partitia "C".

Daca exista, deschideti-l si uitati-va dupa un alt folder, numit "wwwroot".

Daca si acesta exista, atunci creati un nou folder, numit "projects".

Calea completa catre acest folder trebuie sa fie aceasta: "C:\inetpub\wwwroot\projects".



In cazul in care nu aveti folderul "inetpub", creati un folder si redenumiti-l "inetpub".

Dupa care, deschideti-l si creati un nou folder pe care il numiti "wwwroot".

Apoi, creati un nou folder in "wwwroot" pe care il numiti "projects"



In folderul projects vom crea alte doua foldere:

- pe unul il vom numi "res"

- iar pe celalalt il vom numi "scripts"



Deschideti folderul "res" si creati doua noi documente:

- unul numit "reqStyles" cu extensia ".css". Acest document va contine clasele pentru formatarea textului.

- si un document numit "RequestedPage" cu extensia ".html". Aceasta pagina va contine mesajul pe care ni-l va returna serverul.





Deschideti apoi folderul "scripts" si creati un nou document numit "serverRequest" cu extensia ".js".

Acest folder va contine scriptul necesar apelarii metodei "XMLHttpRequest".



Acum vom deschide fisierul "reqStyles.css" si vom adauga urmatoarele doua clase:



.DefaultView

{

background-color: #ffffff;

border: solid 1px #ffffff;

font: 9pt Verdana, sans-serif;

color: #000000;

width: auto;

height: auto;

padding: 3px 3px 3px 3px;

}



.RequestCompleted

{

background-color: #ffffcc;

border: solid 1px #cccccc;

font: 9pt Verdana, sans-serif;

color: #000000;

width: auto;

height: auto;

padding: 3px 3px 3px 3px;

}



Apoi deschidem pagina "RequestedPage.html" si stergem tot ce exista in ea, dupa care introducem urmatorul text:



<h2>This is message</h2>

and there's <strong>some markup</strong> here<br/>

as well as an <a href="http://ajaxpatterns.org">AjaxPatterns link</a>.






Deschidem apoi fisierul "serverRequest.js" si introducem urmatoarele linii de cod:

function $(id) { return document.getElementById(id); }





// create the XMLHttpRequest

window.onload =

function createXMLHttpRequest( )

{

try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}

try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}

try { return new XMLHttpRequest( ); } catch(e) {}



alert("XMLHttpRequest not supported");



return null;

}





// when user clickes the MakeRequestLabel make the request

function GetServerResponse(/* STRING */ elementId)

{

var theContainer = $(elementId);

var req = createXMLHttpRequest();



req.onreadystatechange =

function()

{

if (req.readyState == 4) {

if (req.status == 200) {

theContainer.innerHTML = "Retrieved data from server...<br />";

theContainer.innerHTML += req.responseText;

theContainer.className = "RequestCompleted";

}

else {

alert("Message returned, but with error status. \n" + "Server error: " +
req.status);

}

}

}

// insert here the path to the page wich will be requested

req.open("GET", "res/RequestedPage.htm", true);

req.send(null);

//req.send( ) will complete the request.

//The argument is null because the request only has headers, but no body.

}

 



Cu ajutorul acestui script vom putea face cererea noastra catre server si primi ulterior rezultatul.





Acum nu ne-a mai ramas decat sa mai umblam putin la pagina principala.

Aceasta ar trebui sa arate astfel:


<html xmlns="http://www.w3.org/1999/xhtml">



<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />

<title>O utilizare simpla a XMLHttpRequest</title>

<link href="../XmlHttpRequest/res/reqStyles.css" media="screen" rel="stylesheet"
type="text/css" />



<script src="scripts/serverRequest.js" type="text/javascript"
language="javascript"></script>

</head>



<body>



<h2>O utilizare simpla a XMLHttpRequest</h2>

<hr align="left" color="#0000cd" noshade="noshade" width="75%" size="2px" />

<br />

<br />

<label id="MakeRequestlabel" onclick="GetServerResponse('RequestedContentDiv');"

style="cursor: hand; font-size: 12pt; color: #ff9966; font-family: Georgia,
Serif;">Click aici pentru a face cerearea catre server</label><br />

<br />

<div id="RequestedContentDiv" class="DefaultView">

</div>

<br />

<br />



</body>

</html>

 



Bun. Pentru a testa, trebuie sa deschidem o fereastra de browser in care sa introducem urmatoarea cale:
"http://localhost/projects/default.html"



Dupa ce ni s-a afisat pagina noastra, putem da click pe linkul "Click aici pentru a face cerearea catre server" si vom vedea daca cererea nostra a avut succes sau nu.



Interesant de observat faptul ca nu se face reimprospatarea (refresh) intregului continut al paginii!

Reimprospatarea este una partiala si se aplica doar elementului "div" in care se afiseaza raspunsul serverului!

Cool!
 


De notat ar fi ca in cazul mutarii folderului "projects" din folderul "wwwroot" serverul local nu mai poate procesa cererea noastra si va returna un mesaj de eroare.



Asta e tot !



Acum pagina noastra ar trebui sa arate astfel:


<html>



<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

<title>Ajax si XMLHttpRequest</title>

</head>



<body>



<p>

Pentru a putea face o cerere catre server de pe calculatorul personal, intai si
intai, trebuie sa vedem pe ce partitie este instalat sistemul de operare (de
exemplu, la mine este C:\Windows).

</p>



<p>

Verificati daca aveti folderul "inetpub" pe partitia "C". <br />

Daca exista, deschideti-l si uitati-va dupa un alt folder, numit "wwwroot".<br
/>

Daca si acesta exista, atunci creati un nou folder, numit "projects".<br />

Calea completa catre acest folder trebuie sa fie aceasta: "C:\inetpub\wwwroot\projects".<br
/>

</p>

<p>

In cazul in care nu aveti folderul "inetpub", creati un folder si redenumiti-l "inetpub".<br
/>

Dupa care, deschideti-l si creati un nou folder pe care il numiti "wwwroot".<br
/>

Apoi, creati un nou folder in "wwwroot" pe care il numiti "projects"<br />

</p>

<p>

In folderul projects vom crea alte doua foldere:<br />

- pe unul il vom numi "res"<br />

- iar pe celalalt il vom numi "scripts"</p>

<p>

Deschideti folderul "res" si creati doua noi documente:<br />

- unul numit "reqStyles" cu extensia ".css". Acest document va contine clasele
pentru formatarea textului.<br />

- si un document numit "RequestedPage" cu extensia ".html". Aceasta pagina va
contine mesajul pe care ni-l va returna serverul.<br />

<br />

</p>

<p>

Deschideti apoi folderul "scripts" si creati un nou document numit
"serverRequest" cu extensia ".js".<br />

Acest folder va contine scriptul necesar apelarii metodei "XMLHttpRequest".<br
/>

</p>

<p>

Acum vom deschide fisierul "reqStyles.css" si vom adauga urmatoarele doua
clase:<br />

<br>

.DefaultView<br />

{<br />

background-color: #ffffff;<br />

border: solid 1px #ffffff;<br />

font: 9pt Verdana, sans-serif;<br />

color: #000000;<br />

width: auto;<br />

height: auto;<br />

padding: 3px 3px 3px 3px;<br />

}<br />

<br />

.RequestCompleted<br />

{<br />

background-color: #ffffcc;<br />

border: solid 1px #cccccc;<br />

font: 9pt Verdana, sans-serif;<br />

color: #000000;<br />

width: auto;<br />

height: auto;<br />

padding: 3px 3px 3px 3px;<br />

}<br />

</p>

<br />Apoi deschidem pagina "RequestedPage.html" si stergem tot ce exista in ea,
dupa care introducem urmatorul text:<br />

<br>

&lt;h2&gt;This is message&lt;/h2&gt;<br />

and there's &lt;strong&gt;some markup&lt;/strong&gt; here&lt;br/&gt;<br />

as well as an &lt;a href="http://ajaxpatterns.org"&gt;AjaxPatterns
link&lt;/a&gt;.<br />



<br /><br />

<p>

Deschidem apoi fisierul "serverRequest.js" si introducem urmatoarele linii de
cod:<br />

<p>function $(id) { return document.getElementById(id); }<br>

<br>

<br>

// create the XMLHttpRequest<br>

window.onload =<br>

function createXMLHttpRequest( )<br>

{<br>

try { return new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;); } catch (e) {}<br>

try { return new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;); } catch (e)
{}<br>

try { return new XMLHttpRequest( ); } catch(e) {}<br>

<br>

alert(&quot;XMLHttpRequest not supported&quot;);<br>

<br>

return null;<br>

}<br>

<br>

<br>

// when user clickes the MakeRequestLabel make the request<br>

function GetServerResponse(/* STRING */ elementId)<br>

{<br>

var theContainer = $(elementId);<br>

var req = createXMLHttpRequest();<br>

<br>

req.onreadystatechange =<br>

function()<br>

{<br>

if (req.readyState == 4) {<br>

if (req.status == 200) {<br>

theContainer.innerHTML = &quot;Retrieved data from server...&lt;br
/&gt;&quot;;<br>

theContainer.innerHTML += req.responseText;<br>

theContainer.className = &quot;RequestCompleted&quot;;<br>

}<br>

else {<br>

alert(&quot;Message returned, but with error status. \n&quot; + &quot;Server
error: &quot; +

req.status);<br>

}<br>

}<br>

}<br>

// insert here the path to the page wich will be requested<br>

req.open(&quot;GET&quot;, &quot;res/RequestedPage.htm&quot;, true);<br>

req.send(null); <br>

//req.send( ) will complete the request.<br>

//The argument is null because the request only has headers, but no body.<br>

}<br>

&nbsp;</p>



</p>

Cu ajutorul acestui script vom putea face cererea noastra catre server si primi
ulterior rezultatul.





<br />

<br />

<p>

Acum nu ne-a mai ramas decat sa mai umblam putin la pagina principala.<br />

Aceasta ar trebui sa arate astfel:

<br />

<p>&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;<br>

<br>

&lt;head&gt;<br>

&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;
charset=windows-1252&quot; /&gt;<br>

&lt;title&gt;O utilizare simpla a XMLHttpRequest&lt;/title&gt;<br>

&lt;link href=&quot;../XmlHttpRequest/res/reqStyles.css&quot;
media=&quot;screen&quot; rel=&quot;stylesheet&quot;

type=&quot;text/css&quot; /&gt;<br>

<br>

&lt;script src=&quot;scripts/serverRequest.js&quot;
type=&quot;text/javascript&quot;

language=&quot;javascript&quot;&gt;&lt;/script&gt;<br>

&lt;/head&gt;<br>

<br>

&lt;body&gt;<br>

<br>

&lt;h2&gt;O utilizare simpla a XMLHttpRequest&lt;/h2&gt;<br>

&lt;hr align=&quot;left&quot; color=&quot;#0000cd&quot;
noshade=&quot;noshade&quot; width=&quot;75%&quot; size=&quot;2px&quot; /&gt;<br>

&lt;br /&gt;<br>

&lt;br /&gt;<br>

&lt;label id=&quot;MakeRequestlabel&quot;
onclick=&quot;GetServerResponse('RequestedContentDiv');&quot;<br>

style=&quot;cursor: hand; font-size: 12pt; color: #ff9966; font-family: Georgia,


Serif;&quot;&gt;Click aici pentru a face cerearea catre
server&lt;/label&gt;&lt;br /&gt;<br>

&lt;br /&gt;<br>

&lt;div id=&quot;RequestedContentDiv&quot; class=&quot;DefaultView&quot;&gt;<br>

&lt;/div&gt;<br>

&lt;br /&gt;<br>

&lt;br /&gt;<br>

<br>

&lt;/body&gt;<br>

&lt;/html&gt;<br>

&nbsp;</p>

<p>

Bun. Pentru a testa, trebuie sa deschidem o fereastra de browser in care sa
introducem urmatoarea cale:

"http://localhost/projects/default.html"

</p>

<p>

Dupa ce ni s-a afisat pagina noastra, putem da click pe linkul "Click aici
pentru a face cerearea catre server" si vom vedea daca cererea nostra a avut
succes sau nu.

</p>

<br />Interesant de observat faptul ca nu se face reimprospatarea (refresh)
intregului continut al paginii! <br />

Reimprospatarea este una partiala si se aplica doar elementului "div" in care se
afiseaza raspunsul serverului!<br />

Cool!

&nbsp;<p>

De notat ar fi ca in cazul mutarii folderului "projects" din folderul "wwwroot"
serverul local nu mai poate procesa cererea noastra si va returna un mesaj de
eroare.

</p>

<p>

Asta a fost tot !

</p>

</body>



</html>

 

No comments: