Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> prototype i ResponseXML
Apo
post
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


Witam

Mam pewien problem przy używaniu ResponseXML w prototype:

  1. function addComment() {
  2.  
  3. var myAjax = new Ajax.Request(
  4. url,
  5. {
  6. method: 'post',
  7. parameters: pars,
  8. onComplete: showResponse,
  9. onFailure: showError
  10. });
  11.  
  12. }
  13.  
  14. function showResponse(Request)
  15. {
  16. response = Request.responseXML; // tu występuje błąd
  17.  
  18. error = response.getAttribute('error');
  19. nick = response.getAttribute('nick');
  20. email = response.getAttribute('email');
  21. www = response.getAttribute('www');
  22. content = response.getAttribute('content');
  23.  
  24. if(error == 1)
  25. alert('Wystąpił błąd. Komentarz nie został dodany');
  26. else
  27. $('add_comment').innerHTML = content;
  28. }
  29.  
  30. function showError(Request)
  31. {
  32. alert('Wystąpił błąd!');
  33. }
  34.  
  35. var myGlobalHandlers = {
  36. onCreate: function(){
  37. Element.show('loader');
  38. },
  39.  
  40. onComplete: function() {
  41. if(Ajax.activeRequestCount == 0){
  42. Element.hide('loader');
  43. }
  44. }
  45. };
  46.  
  47. Ajax.Responders.register(myGlobalHandlers);


No i błąd występuje przy odbieraniu XML w : response = Request.responseXML;
Cały czas jest pokazany loader, że trwa zapisywanie komentarza (linie poniżej wogle nie są wykonywane), gdy zmienie
response = Request.responseXML; na
response = Request.responseText; i sprawdze co zwraca skrypt to otrzymuje xml wygenetowany przez XMLwriter:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <nick>Apo</nick><email>test@op.pl</email><www></www><content>Lorem ipsum Lorem ipsum Lorem ipsum</content><date>1169917331</date>


Pozdrawiam

Ten post edytował Apo 27.01.2007, 18:03:36
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
PiotrLegnica
post
Post #2





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 6.07.2005
Skąd: Legnica

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


Po pierwsze, to ten XML nie jest poprawny. Dokument XML może mieć tylko jeden root element, u ciebie jest ich więcej.
Powinno być mniej więcej tak:
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <response>
  3. <nick>Apo</nick>
  4. <email>test@op.pl</email>
  5. <www></www>
  6. <content>Lorem ipsum Lorem ipsum Lorem ipsum</content>
  7. <date>1169917331</date>
  8. <error>0</error>
  9. </response>

Generowane np. tak:
  1. <?php
  2. header('Content-type: text/xml; charset=utf-8');
  3.  $xw = new xmlWriter();
  4.  $xw->openMemory();
  5.  $xw->startDocument('1.0','UTF-8');
  6.  
  7.  $xw->startElement('response');
  8.  
  9.  $xw->writeElement('error', $error);
  10.  $xw->writeElement('nick', $nick);
  11.  $xw->writeElement('email', $email);
  12.  $xw->writeElement('www', $www);
  13.  $xw->writeElement('content', $content);
  14.  $xw->writeElement('date', $date);
  15.  
  16.  $xw->endElement();
  17.  
  18.  $xw->endDocument();
  19.  echo $xw->outputMemory(true);
  20. ?>

Element error dodawaj zawsze, a wartości możesz pobierać np. tak:
Kod
var root = $A(Request.responseXML.getElementsByTagName('response'))[0];
var error = root.firstChild;
var nick = error.nextSibling;
var email = nick.nextSibling;
var www = email.nextSibling;
var content = www.nextSibling;

if(error.firstChild.nodeValue == 1)
alert('Wystąpił błąd. Komentarz nie został dodany');
else
$('add_comment').innerHTML = content.firstChild.nodeValue;

Jeśli masz stałą kolejność elementów, lub
Kod
var error = $A(root.getElementsByTagName('error'))[0];
var nick = $A(root.getElementsByTagName('nick'))[0];
var email = $A(root.getElementsByTagName('email'))[0];
var www = $A(root.getElementsByTagName('www'))[0];
var content = $A(root.getElementsByTagName('content'))[0];
Go to the top of the page
+Quote Post

Posty w temacie


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: 2.10.2025 - 20:44