Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ajax] jak zacząć z XMLem
Forum PHP.pl > Forum > XML, AJAX > AJAX
chomiczek
Witam, mam problem, a mianowicie chciałbym dynamicznie zmieniac jakieś elementy strony i nie ma problemu, zebym użył do tego celu XML, póki co używam czegos takiego w JS:
Kod
advAJAX.get({ url: "look.php?symbol="+p, tag: "symbol" });
      advAJAX.get({ url: "look.php?rozmiar="+p, tag: "rozmiar" });
      advAJAX.get({ url: "look.php?skora="+p, tag: "skora" });
      advAJAX.get({ url: "look.php?fotoD="+p, tag: "fotoD" });
      advAJAX.get({ url: "look.php?link="+p, tag: "zapytanie" });


o wiele lepiej byloby utworzyć mi plik XMLa i przesłać go do przeglądarki tylko jak określi gdzie ma zostac użyty jaki znacznik??

Ma ktoś moze przykładowy plik z XMLem??

P.S. rozumie, ze jakis parser XML.
P.S.2. znalazłem http://advajax.anakin.us/phpsolutions/2.js ale troche nie czytelny dla mnie ten kod
TomASS
Tak - będzie Ci potrzebny parser XML. Łukasz Lach bardzo elegancko to zrobił i z takiego rozwiązania należy korzystać. Skoro mówisz, że skomplikowany przykład to zobacz na tego posta i na funkcję JS parseRecords(xml). Nie zapomnij przy generowaniu plik XML o odpowiednich nagłówkach:
  1. header("Content-type: text/xml; charset=UTF-8"); 
  2. echo '<?xml version="1.0" encoding="UTF-8"?>';


Powodzenia
chomiczek
to akurat juz przerobiłem teraz chodzi mi o stworzenie prostego parsera:
przykładowy kod XML mam tutaj http://karamanski.pl/advAJAX/look.php?symbol=2
jak pokazać teraz na stronie to co biore z XMLa??
TomASS
Cytat
The XML page cannot be displayed
An invalid character was found in text content. Error processing resource 'http://karamanski.pl/advAJAX/look.php?symbol=2'....

Najpierw popraw aby był to poprawny kod XML.
Chyba nie za bardzo przyjżałeś się funkcji parsera:

Kod
function parseRecords(xml) {

var opttypes = document.getElementById("gminy");
record = xml.getElementsByTagName("record");
ID = new Array();
nazwa = new Array();
for (i = 0; i < record.length; i++) {
nazwa[i] = record[i].childNodes[1].childNodes[0].nodeValue;
ID[i] = record[i].childNodes[0].childNodes[0].nodeValue;

}


gdzie xml to obiekt obj.responseXML.
i masz:
pobierasz wszystkie record y (główne węzły):
Kod
record = xml.getElementsByTagName("record");

a późneiej w pętli przelatujesz przez każdego i pobierasz jego pierwszą i drugą wartość:
Kod
nazwa[i] = record[i].childNodes[1].childNodes[0].nodeValue;
ID[i] = record[i].childNodes[0].childNodes[0].nodeValue;


struktura XML w tym przypadku wyglada tak:
Kod
<record>                          //record[i]
<ID>Identyfikator</ID>   //record[i].childNodes[0].childNodes[0].nodeValue;
<name>nazwa</name>    //record[i].childNodes[1].childNodes[0].nodeValue;
</record>


Teraz jaśniej ? smile.gif
chomiczek
sądziłem, że już po problemie, a okazuje sie, ze jednak nie:
tutaj mam XMLa: http://karamanski.pl/advAJAX/look.php?symbol=1
tym plikiem przetwarzam look.php http://karamanski.pl/advAJAX/obuwie.php

  1. <script type="text/javascript">
  2. function parseRecords(xml)
  3. {
  4. symbol = xml.getElementsByTagName("symbol");
  5. ozn = symbol[0].childNodes[0].childNodes[0].nodeValue;
  6. symbol = symbol[0].childNodes[1].childNodes[0].nodeValue;
  7. skora = symbol[0].childNodes[2].childNodes[0].nodeValue;
  8. //alert(ozn+' '+symbol+' '+skora);
  9. }
  10. function zmienModel(p)
  11. {
  12. advAJAX.get({
  13. url : "look.php?symbol="+p,
  14. onInitialization : function() { },
  15. onSuccess : function(obj) { parseRecords(obj.responseXML); }
  16. });
  17. }
  18.  

ma ktoś jakis pomysł?

pod IE widze błąd: Obiekt nie obsługuje tej właściwości lub metody.

Prawie sobie poradziłem, brakowało VAR:
  1. function parseRecords(xml)
  2. {
  3. var symbole = xml.getElementsByTagName('symbol');
  4. var ozn = symbole[0].childNodes[0].childNodes[0].nodeValue;
  5. var symbolx = symbole[0].childNodes[1].childNodes[0].nodeValue;
  6. var skora = symbole[0].childNodes[2].childNodes[0].nodeValue;
  7. alert(ozn+' '+symbolx+' '+skora);
  8. }


Problem jest jeśli che użyć:
Cytat
$("ozn").innerHTML = 'dasdasd';

wywala komunikat: o oczekiwanym obiekcie w linii z powyższym kodem.
bigZbig
@chomiczek - sprawdz co robi funkcja $() (zakladam ze poslugujesz sie w tym wypadku funkcja napisana przez Anakina), a potem spojrz co Ty podajesz jako argument tej funkcji.
chomiczek
Właściwie to nie wiem co masz na myśli, bo patrząc na przykładowy plik http://advajax.anakin.us/phpsolutions/2.js znajduje w nim:
  1. $("dataStats").innerHTML =
  2. "Rekordy: " + startId + " - " + (startId+getAttribute("count")*1-1) + " z " + total + " (Strona: " +
  3. (page+1) + " z " + maxPage + ")";
i tak naprawdę nie wiem czym ten zapis miałby sie różnić od mojego.

P.S. A może napiszesz mi co powinnienem napisać??
TomASS
A masz wogóle funkcję $:
Kod
function $(id){
  return document.getElementById(id);
}
chomiczek
hehe.. dzięki TomASS.. juz działa.. PZDR
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.