AJAX -opas

AJAX -opas

Viesti Harr1l 23 Elo 2007 12:45

Niille jotka eivät tiedä mikä AJAX on alkuun selvennykseksi: AJAX ei ole mikään erityinen ohjelmointikieli, vaan siinä hyödynnetään JavaScriptiä hakemaan palvelimelta uutta tietoa, jotta sivua ei tarvitse ladata aina uudestaan. Esimerkiksi Gmail ja Windows Live Hotmail käyttävät AJAXia ja koko sivun latauksen sijaan ladataan vain uusi viesti. Tämä säästää aikaa, mahdollisesti helpottaa palvelimen kuormaa ja on mukavampi käyttää.

Noniin asiaan:
Perustietona tarvitsee osata (X)HTML ja JavaScript vähintään. Tosin PHP / muu palvelinpuolen ohjelmointikieli on lähes ehdoton minkään asian hyödyntämiseksi, samoin kuin CSS. Tästä oppaasta saa seuraavanlaisen sivun AJAX md5 ja sha-1 laskuri. (IE7 ei toimi aivan täysin oikein, Firefox toimii).

Tehdään ensin perus index.php -tiedosto:
Koodi: Valitse kaikki
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>AJAX</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <script type="text/javascript" src="jscript.js"></script>
</head>
<body>
   <form name="ajaxTest" action="">
      <strong>Teksti:</strong>
      <input type="text" onkeyup="doHash(this.value)" name="textEdit" />
      <br />
      <strong>MD5</strong><input checked="checked" type="radio" value="1" name="textSelect" onchange="selectHash(this.value, textEdit.value)" />
      <br />
      <strong>SHA-1</strong><input type="radio" value="2" name="textSelect" onchange="selectHash(this.value, textEdit.value)" />
   </form>
   <strong id="hash">MD5:</strong> <span id="md5"></span>
</body>
</html>


Nyt huomaamme <input> tageissa olevat onkeyup ja onchange merkinnät.

onkeyup="doHash(this.value)" suorittaa doHash funktion kyseisen <input> kentän arvolla, kun näppäin päästetään ylös.

onchange="selectHash(this.value, textEdit.value)" suorittaa selectHash funktion kyseisen <input> kentän arvolla, sekä myös textEdit -nimellä olevan kentän arvolla , kun kyseisen kentän arvo vaihtuu.


index.php:n lisäksi tarvitsemme tietysti JavaScript koodia, joka on sijoitettu jscript.js -tiedostoon:
Koodi: Valitse kaikki
hash = 1;

function selectHash(selected, str)
{
   if (selected > 0)
   {
      hash = selected;
      if (selected == 1)
      {
         document.getElementById("hash").innerHTML = "MD5";
         doHash(str);
      }
      else if (selected == 2)
      {
         document.getElementById("hash").innerHTML = "SHA-1";
         doHash(str);
      }
      else
      {
         document.getElementById("hash").innerHTML = "Virhe";
      }
   }
   else
   {
      return hash;
   }
}

function GetXmlHttpObject()
{
   var xmlHttp = null;
   try
   {
      // Firefox, Opera 8.0+, Safari
      xmlHttp = new XMLHttpRequest();
   }
   catch (e)
   {
      // Internet Explorer
      try
      {
         xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (e)
      {
         xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
   }
   return xmlHttp;
}

function doHash(str)
{
   xmlHttp = GetXmlHttpObject()
   if (xmlHttp == null)
   {
      alert ("Your browser does not support AJAX!");
      return;
   }
   var url = "ajax.php";
   url = url+"?q="+str+"&e="+selectHash(0);
   xmlHttp.onreadystatechange = stateChanged;
   xmlHttp.open("GET",url,true);
   xmlHttp.send(null);
}

function stateChanged()
{
   if (xmlHttp.readyState == 4)
   {
      document.getElementById("md5").innerHTML = xmlHttp.responseText;
   }
}


hash -muuttuja alustetaan arvolla 1, jotta MD5-hash olisi valittu aluksi

Ehtolauseet pitäisi olla tiedossa jo etukäteen, joten selvitetään vain muutama dynaamisuutta tekevä ominaisuus.

document.getElementById("hash").innerHTML = "MD5"; etsii id="hash" tagin ja innerHTML muuttaa kyseisen tagin sisällöksi MD5. Eli jos aluksi on <span id="hash">Testi</span>, niin tämä muuttaa sen muotoon <span id="hash">MD5</span>. innerHTML on siis tärkeä osa tekstin muuttamiseen ilman uudelleenlatausta.

GetXmlHttpObject() on suoraan w3schools.com:ista otettu ja se luo xmlHttp -objektin. Tätä ei tarvitse ainakaan toistaiseksi muutella.

xmlHttp.onreadystatechange = stateChanged; -Suoritetaan stateChanged -funktio, joka tarkastaa että vastaus on valmis. (if (xmlHttp.readyState == 4))

xmlHttp.open("GET",url,true); ja xmlHttp.send(null); -Suorittaa kyselyn määritettyyn osoitteeseen, tässä esimerkissä ajax.php:lle.

Lopuksi tarvitaan vielä JavaScriptin pyyntöihin vastaava PHP-pätkä, ajax.php
Koodi: Valitse kaikki
<?php

if ($_GET['e'] == 1)
{
   echo md5($_GET['q']);
}
elseif ($_GET['e'] == 2)
{
   echo sha1($_GET['q']);
}
else
{
   echo "Virhe";
}


?>



Lisäinfoa:
Kaikki JavaScript -tapahtumat


Ehdottakaa jotain parannuksia jne.. Kaikkea en selittyänyt tarkoituksella, sillä alkutietoa käytetyistä ohjelmointikielistä olisi hyvä olla
[piilotettu kuva]
Käyttäjän avatar
Harr1l
 
Viestit: 61

Re: AJAX -opas

Viesti Matso 24 Elo 2007 15:23

Tiedän ihan kokemuksesta, että tällasesta ei alottelija tajua luultavasti yhtikäs mitään. Ehkä tän avulla osaa alottelijakin tehdä pikku AJAX scriptin joka hakee jonkun sivun palvelimelta tajuamatta lainkaan mitä siinä koodissa itseasiassa tehdään. Voisit hieman paremmin kertoa vielä tosta GetXmlHttpObject()-funktion toiminnasta, mitä noi try-catch lohkot tekee jne. Aika vähän jotain virheenkäsittelyä tarvii pelkästään JS:ää käytettäessä.
Käyttäjän avatar
Matso
 
Viestit: 4414

Palaa alueelle Ohjelmointioppaat