View previous topic :: View next topic |
Author |
Message |
gilgamesh_-
Joined: 02 Sep 2007 Posts: 4
|
Posted: 03.09.2007 19:37 Post subject: HttpRequest problem pocetnik (pomoc) |
|
|
Pozdrav svima, poceo sam nesto sa ajaxom da radim pa sam naisao na problem. Ako je netko voljan pomoci, bio bi zahvalan.
Imam slijedeci javascript na stranici:
Code: | window.onload = initXHRreq;
var xhr = false;
function initXHRreq() {
document.getElementById("XML_azija_request").onclick = getFile;
document.getElementById("XML_zapad_request").onclick = getFile;
}
function getFile() {
makeRequest(this.href);
return false;
}
function makeRequest(url) {
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
xhr.onreadystatechange = showContent;
xhr.open('GET', url, true);
xhr.send(null);
}
else {
if (window.ActiveXObject) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
xhr.onreadystatechange = showContent;
xhr.open('GET', url, true);
xhr.send(null);
}
catch (e) {}
}
}
}
function showContent() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
var xmlFile = xhr.responseXML;
var tagElem = xmlFile.getElementByTagName('Catalog')[0];
document.getElementById("content").innerHTML = tagElem;
}}
else {
document.getElementById("content").innerHTML = "Evo jos jedan problem j****u <br /> Status: " + xhr.status + "<br />readyState: " + xhr.readyState;
}
} |
U samom HTML-u stranice imam dva linka:
Code: | <a id="XML_azija_request" href="Azijska_produkcija.xml">Azijska produkcija</a><br />
<a id="XML_zapad_request" href="Zapadna_produkcija.xml">Zapadna produkcija</a> |
... i jedan
Code: | <div id="content"> </div> |
Trebalo bi na klik na poveznice otvoriti xml fileove u divu (znaci bez otvaranja ove stranice), ali nece. Umjesto toga mi izbacije da je XMLHttpRequest.status = 200 (znaci ok) i XMLHttpRequest.readyState = 3 (a trebalo bi biti 4)
Text fileove mi otvara dobro.
Evo i primjer xml datoteke
Code: | <?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="katalog.xsl"?>
<Catalog xml:lang="ENG">
<Row>
<name>Dreams</name>
<year >1990</year>
<link>http://www.imdb.com/title/tt0100998/</link>
<director>Akira Kurosawa</director>
</Row>
</Catalog> |
|
|
|
Back to top |
|
|
Sulien
Joined: 04 Jan 2004 Posts: 2905 Location: Zagreb
|
Posted: 03.09.2007 20:53 Post subject: |
|
|
Imaš tri greške: getElementsByTagName se piše u pluralu; onreadystate handler bi ti trebao preskakati sve "ready states" prije četvrtog; i malo je glupo staviti XML node direktno u innerHTML nekog elementa u dokumentu, ali ako ti browser to oprosti onda mogu i ja.
Napisao sam malo ljepše tvoj kod, pa pogledaj:
http://pastie.caboo.se/93549
Zanima me, što si točno htio ovime da radi?
Code: | var tagElem = xmlFile.getElementByTagName('Catalog')[0];
document.getElementById("content").innerHTML = tagElem; |
|
|
|
Back to top |
|
|
gilgamesh_-
Joined: 02 Sep 2007 Posts: 4
|
Posted: 03.09.2007 22:38 Post subject: |
|
|
Sulien wrote: |
Napisao sam malo ljepše tvoj kod, pa pogledaj:
http://pastie.caboo.se/93549
Zanima me, što si točno htio ovime da radi?
Code: | var tagElem = xmlFile.getElementByTagName('Catalog')[0];
document.getElementById("content").innerHTML = tagElem; |
|
Hvala na kodu sutra cu pogledat (sad mi se pajki).
Htio sam da mi izlista tag sa imenom catalog u inner htmlu od diva. Pretpostavljam da sam htio recimo smo ime directora trebalo bi
getElementsByTagName('director')[0];
U medjuvremenu sam promjenio onaj svoj kod na :
Code: | var xmlFile = xhr.responseXML;
document.getElementById("content").innerHTML = xmlFile; |
Sad mi u innerHTML ispise Code: | [object XMLDocument] | . Sta bi to trebalo znacit? Da je xml file dobiven ali ga ne moze procitat? |
|
|
Back to top |
|
|
Sulien
Joined: 04 Jan 2004 Posts: 2905 Location: Zagreb
|
Posted: 04.09.2007 13:27 Post subject: |
|
|
Ne, to samo znači da sam bio u pravu kad sam tvrdio da ne znaš što radiš.
innerHTML ti je string property, što znači da iz njega i u nj čitaš i pišeš stringove. Tvoja varijabla xmlFile sadrži XMLDocument objekt, što nije string (daleko od toga). JavaScript će to implicitno pretvoriti u string i dobit ćeš "[object XMLDocument]". Ništa čudno.
Mislim da radiš s XML-om, a da zapravo ne znaš zašto (osim što si to vidio na tutorialima). Drugim riječima, ne znaš ga parsirati. Zašto ne namjestiš server da ti vrati HTML kao Ajax response? Onda bi mogao imati ovo kao handler funkciju:
Code: | document.getElementById("content").innerHTML = xhr.responseText |
|
|
|
Back to top |
|
|
Sulien
Joined: 04 Jan 2004 Posts: 2905 Location: Zagreb
|
Posted: 04.09.2007 13:57 Post subject: |
|
|
Ako baš želiš raditi s postojećim XML-om (tj. ako imaš neki razlog za to), evo kako možeš parsirati rezultat tvog Ajax requesta: http://pastie.caboo.se/93749 |
|
|
Back to top |
|
|
gilgamesh_-
Joined: 02 Sep 2007 Posts: 4
|
Posted: 04.09.2007 16:17 Post subject: |
|
|
Dobro ...
Hvala na informacijama (to sam i trazio; informacije). Isao sam koristiti xml ne zato sto mi treba vec zato sto sam htio vidjeti sta to je (sad opet mogu ici plakati) |
|
|
Back to top |
|
|
Sulien
Joined: 04 Jan 2004 Posts: 2905 Location: Zagreb
|
Posted: 06.09.2007 02:50 Post subject: |
|
|
XML ti nije dobar za početak, njime barataš kad si advanced i kad poznaješ DOM.
Do tada, jednostavno reci svom serveru da ti vraća HTML fragmente na XMLHttpRequest pozive. Recimo ovako nešto (PHP):
Code: | <div>
<h1>Ludnica</h1>
<ol><?php foreach(array('foo', 'bar') as $item): ?>
<li><?php echo $item ?>
<?php endforeach ?></ol>
</div> |
Znači to je neki na serveru dinamički generiran fragment HTML-a. Kul. Sad ga možeš zatražiti s Ajaxom i ubaciti cijeli taj fragment u tvoje stablo. Pogledaj prvi pastie koji sam ti poslao: samo zamijeni funkciju ovom:
Code: | function success(transport) {
content.innerHTML = transport.responseText;
} |
I to je to. Ne može biti lakše, a luđački je efektivno.
Ne ide ti toliko loše, samo ne smiješ odustati samo zato što ti tu i tamo nešto nije jasno. Idi jednostavno, malo po malo, i kloni se teških stvari. Sva ova gomila koda što sam ti poslao će ti sigurno pomoći ako ga pažljivo proučiš. |
|
|
Back to top |
|
|
gilgamesh_-
Joined: 02 Sep 2007 Posts: 4
|
Posted: 07.09.2007 16:22 Post subject: |
|
|
Moze, hvala na savjetima. Znace puno vise kad dolaze od iskusnijeg programera.
Sad bar znam gdje se obratit ako bude problema |
|
|
Back to top |
|
|
|