[sr] AJAX - svi pričaju a niko da napiÅ¡e kako :)
XMLHttpRequest ? AJAX ? Stara tehnologija – novo ime
Hoćete da probate? Bar dvadesetak ljudi me pitalo da napi?em primer nekog koda. Evo jednog prostog primera: http://www.devprotalk.com/showthread.php?t=53
Napredniji primer možete pogledati ovde:
Prvo definišemo jednu varijablu, čisto da stvari budu jasnije
var LOAD_COMPLETE = 4;
XMLHttpObject kreiramo sa:function getHTTPObject() { var xmlhttp; /*@cc_on @if (@_jscript_version >= 5) try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } }@else xmlhttp = false; @end @*/ if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp = false; } }return xmlhttp; }
var httpObj = getHTTPObject();
Zatim kreiramo funkciju koja ća da učitava neki url, i ako je uspešno učitano, onda se izvršava funkcija koja će učitani sadržaj da prikaže na određenom mestu (handleHttpObj), obično u nekom DIV-u:
function receiveDoc(url) {
if (url '') {
alert ('please enter url');
return false;
}if (httpObj.readyState = = LOAD_COMPLETE || httpObj.readyState = = 0) {
httpObj.open("GET", url, true);
httpObj.onreadystatechange = handleHttpObj;
httpObj.send(null);
}
}Učitava se reply servera i sa njim radimo šta želimo, u ovom primeru ćemo dobijeni sadržaj jednostavno prikazati u nekom DIV-u koji nosi id “feed”. U ovom primeru takođe učitavamo i header (
getAllResponseHeaders()) i možemo zbog debugg-ovanja i njega da prikažemo u nekom DIV-u (u ovom slučaju “hdr”).
function handleHttpObj() { if (httpObj.readyState = = LOAD_COMPLETE) { result = httpObj.responseText; header = httpObj.getAllResponseHeaders();if (httpObj.status = = 404) { alert ("Ih, bre. Nema tog dokumenta"); }else if (httpObj.status = = 200) { ref = document.getElementById("feed"); ref.innerHTML = result;h = document.getElementById("hdr"); h.innerHTML = header; }else { alert ('Status '+httpObj.status+" ne umem da prepoznam"); } }}
Naravno ovo sve mora da se nađe između <script></script> i jer je u pitanju JavaScript.
Kreiramo jednostavnu stranu:
<a href="#" onclick="receiveDoc('test1.html'); return false;">test1</a> -
<a href="#" onclick="receiveDoc('test2.txt'); return false;">test2</a> -
<a href="#" onclick="receiveDoc('test.xml'); return false;">xml</a> -
<a href="#" onclick="receiveDoc('http://www.google.com/'); return false;">google</a> -
<div id="hdr" style="float:right: width:30%"></div>
<div id="feed" style="width:65%;"></div>
Probajte, jednostavnije je nego što se čini na prvi pogled.
Napomena: Morao sam da razdvojim znakove jednakosti “” jer ih WordPress iz nekog razloga ne prikazuje kada su spojeni. Oni moraju biti spojeni.
June 17th, 2005 at 1:53 pm
Je l’ to tvoj sajt guta operator “==” ili je u pitanju feature jScripta za koji jo nisam čuo, da je taj operator opcion?
June 17th, 2005 at 4:24 pm
Ma muku sam namucio da ovo prikazem kao kod, ocigledno WordPress ima neku frku, odnosno ne znam kako da mu iskljucim “opcije” a da ne brljam po kodu. Recimo kada stavis minus ispred teksta onda stavi precrtan tekst
ovako. Vidim, ocigledno guta “==”, ne znam sta drugo nego da okacim na download, ali mi nije bila to ideja vec da neko nesto nauci umesto da “prepise”Aj’ pokusacu da izmenim to, ne znam u cemu je problem.
June 17th, 2005 at 5:10 pm
Da ti nije uključen [url=http://daringfireball.net/projects/markdown/syntax]markdown[/url] plugin?
June 17th, 2005 at 5:13 pm
Ups. Izvinjavam se na pogreno unetom linku. I textile plugin izgleda slui za istu svrhu. Vazda se nađe neko da izmilja novi HTML.
May 3rd, 2006 at 8:22 pm
Nakon skoro godinu dana
Da li je moguće zaobići pravilo Accessible URLs – http://ajaxpatterns.org/XMLHttpRequest_Call, jer nikako ne mogu da pošaljem request, a kamoli dobijem response sa nekog drugog servera. Npr. kao što je navedeno google
November 26th, 2006 at 5:01 pm
Da odgovorim samom sebi
http://serebryakov.ru/lab/ajaxextended/