Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [AJAX][XML] Obsługa odpowiedzi XML, Problem ze wyciągnięciem danych z konretnego tagu
troophel
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 3.05.2006

Ostrzeżenie: (0%)
-----


Witam,

zdaję sobie sprawę, że jest masa tutoriali na ten temat, ale mimo niemalże kopiowania przykładów nie udało mi się sprawić, aby mój kod zadziałał.

Robię prostą przeglądarkę zdjęć, nawigacja pomiędzy obrazami napisana jest w AJAXie. Skrypt php pobiera dane dot. obrazka z bazy, po czym generuje kod xml. I wszystko chodzi pięknie jeśli obsługuję odpowiedź poprzez responseText. Niestety muszę odseparować sam obrazek od jego opisu. Obsługę responseXML skopiowałem z książki:

  1. function showImgResponse(obj) {
  2. $('imgLoader').hide();
  3. xmlRoot = obj.responseXML.documentElement;
  4. imgSrcArray = xmlRoot.getElementsByTagName('imgSrc');
  5. imgIdArray = xmlRoot.getElementsByTagName('imgId');
  6. var html = "";
  7. for (var i=0; i<imgSrcArray; i++)
  8. html += imgSrcArray.item(i).firstChild.data;
  9. $('album').innerHTML = "Oto album:" + html;
  10. }


Problem jest taki, że skrypt nie wykonuje nic. Nie wyświetla nawet "Oto album". Samo zapytanie AJAX jest wykonywane, gdyż loader pojawia się i znika, co znaczy, że w.w. funkcja showImgResponse również działa. Najgorsze jest to, że konsola błędów nic nie wyrzuca, ani nie wyrzuca nic php. Naprawdę nie mam już pomysłu.
Tutaj jeszcze przykładowy XML:
  1.      <?xml version="1.0" encoding="utf-8"?>
  2.      <response>
  3.        <photo>
  4.          <imgSrc><img src="img/ruch_run.jpg"/></imgSrc>
  5.          <imgId><input type="hidden" value="4"/></imgId>
  6.        </photo>
  7.        <description>
  8.        Czwarte nasze foto :)
  9.        </description>
  10.      </response>


Dzięki za pomoc,

Pozdrawiam,

Adam
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Najgorsze jest to, że konsola błędów nic nie wyrzuca, ani nie wyrzuca nic php. Naprawdę nie mam już pomysłu.

Zrób sobie w FireBugu breakpointa zaraz po wykonaniu funkcji, będziesz miał wówczas tracing z zawartością wszystkich obiektów.

Poza tym:
  1. dałeś trochę za mało kodu, sama funkcja, to nieco za mało - przyda się jeszcze MIME zwracanej odpowiedzi i konkretnej strony
  2. domniemam, że korzystasz z jQuery - dlaczego wyciąganie danych z XML robisz na piechotę, skoro możesz wszystko mieć dosłownie jedną linijką...?

Cytat
ale mimo niemalże kopiowania przykładów nie udało mi się sprawić

Właśnie dlatego o wiele lepiej uczyć się z dokumentacji niż z książek autorstwa tzw. programistów, którzy klepią listingi bez sprawdzania.
Go to the top of the page
+Quote Post
troophel
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 3.05.2006

Ostrzeżenie: (0%)
-----


Firebug faktycznie zwraca responseXML = null. Nie mam pojęcia natomiast jak sprawić by nie widział tego jako responseText, ale jako XML właśnie. Zacząłem kombinować również z JSON, również bez skutku. Myślałem, że może napisanie wszystkiego z klasy DOMDocument coś da, ale czegoś mi pewnie brakuje. Wkleję może php obsługujący ajaxa:

  1. <?php
  2. if ($_GET['mod'] == "album") {
  3.  $id = $_GET['imgId'];
  4.  if ($_GET['opt'] == 'prev') {
  5.    $query = "SELECT * FROM images WHERE id<'".$id."' ORDER BY id DESC LIMIT 0,1";
  6.  } else {
  7.    $query = "SELECT * FROM images WHERE id>'".$id."' LIMIT 0,1";
  8.  }
  9.  $mysql_query = mysql_query($query);
  10.  
  11.  if (mysql_num_rows($mysql_query)==0) {
  12.    if ($_GET['opt'] == 'prev') {
  13.      $query = "SELECT * FROM images ORDER BY id DESC LIMIT 0,1";
  14.    } else {
  15.      $query = "SELECT * FROM images LIMIT 0,1";
  16.    }
  17.    $mysql_query=mysql_query($query);
  18.    $data = mysql_fetch_array($mysql_query);
  19.  } else {
  20.  $data = mysql_fetch_array($mysql_query);
  21.  }
  22.  
  23.  $xml = new DOMDocument("1.0", "utf-8");
  24.  $xml->formatOutput = true;
  25.  $resp = $xml->createElement("response");
  26.  $xml->appendChild($resp);
  27.  $photo = $xml->createElement("photo");
  28.  $resp->appendChild($photo);
  29.    
  30.    $imgSrc = $xml->createElement("imgSrc");
  31.    $photo -> appendChild($imgSrc);
  32.      $imgSrc->appendChild($xml->createTextNode($data['url']));
  33.    $imgId = $xml -> createElement("imgId");
  34.      $imgId->appendChild($xml->createTextNode($data['id']));
  35.    $photo -> appendChild($imgId);
  36.    
  37.  $description = $xml->createElement("description");
  38.    $description->appendChild($xml->createTextNode($data['description']));
  39.  $resp->appendChild($description);
  40.  echo $xml -> saveXML();
  41. }
  42. ?>


I używam prototype.js.

Dzięki za pomoc,

Pozdrawiam,

Adam

Ten post edytował troophel 28.05.2009, 12:49:19
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Mam nadzieję, że wywołujesz to tak:
Kod
new Ajax.Request('/your/url', {
  onSuccess: function(transport) {
      // yada yada yada
  }
});


Cytat
Wkleję może php obsługujący ajaxa:

A gdzie Ty ustalasz MIME? Nie ma.
Go to the top of the page
+Quote Post
troophel
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 3.05.2006

Ostrzeżenie: (0%)
-----


Jest jak mówisz - wszystko rozbijało się o brak MIME, nie wiem czemu to przeoczyłem (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif) .

Niemniej - niezmierne dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pomógł -> klik (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Pozdrawiam,

Adam

Ten post edytował troophel 28.05.2009, 14:36:12
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 09:18