Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Like Tree1Danke
  • 1 Beitrag von Sven Mintel
ERLEDIGT
NEIN
ANTWORTEN
14
ZUGRIFFE
834
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Hallo,

    ich setze ein XmlHttpRequest ab, und bekomme als responseText die HTML Seite zurück. Das ist auch alles gut so. Nur benötige ich jetzt ein Element aus der Seite vom response. Deswegen will ich mittels getElementById() das Element auswählen, aber der Text von responseText wird anscheinden nicht als HTML behandelt.

    Kann ich das irgendwie machen?

    Gruß
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    ja, das kannst du machen.

    Sofern die HTML-Source, die du da geliefert bekommst, gültiges XML ist, kannst du per responseXML auf das Dokument-Objekt zugreifen.
     

  3. #3
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Und im gültiges XML zu bekomme muss ich im HTML beim meta-Tag den MimeType "application/xhtml+xml" angeben oder?

    Den wenn ich responseXML benutze bekomme ich nur "null" zurück!
     

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Nö, um gültiges XML zu bekommen, musst du gültiges XML liefern, es reicht da nicht aus, zu Behaupten, dass es XML ist.

    Hier die Grundregeln: http://de.wikipedia.org/wiki/Extensi...sischer_Aufbau
     

  5. #5
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Aber ich habe doch schon alles gemacht. Mein Dokument ist auch XHTML valide.

    Ich habe es mal so probiert, aber geht auch nicht:
    HTML-Code:
    <?xml version="1.0"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
    ...
     

  6. #6
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Poste doch mal die Source deines Dokumentes, also das, was dort als Antwort ankommt.
     

  7. #7
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Ich mache folgendes:
    Code :
    1
    2
    
    var response = xmlHttp.responseXML;
    alert(response);

    Und bekomme dann nur null als Ausgabe!

    EDIT:

    Bin grad über folgendes Thema gestolpert: http://www.tutorials.de/javascript-a...xt-parsen.html

    Das ist genau das, was ich auch brauche. Kannst du mir vllt ein Beispiel geben wie du das meinst dort, denn das versteh ich nicht ganz?

    Gruß
    Geändert von zer0 (03.09.10 um 20:48 Uhr)
     

  8. #8
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Zitat Zitat von zer0 Beitrag anzeigen
    Ich mache folgendes:
    Das ist genau das, was ich auch brauche. Kannst du mir vllt ein Beispiel geben wie du das meinst dort, denn das versteh ich nicht ganz?
    Code :
    1
    2
    
    var dummy = document.createElement('div');
        dummy.innerHTML=xmlHttp.responseText;

    dummy ist ein Elementknoten, auf den du alle DOM-Methoden eines soclhe Knoten anwenden kannst.
    Da ist aber der Haken: so ein Knoten hat keine Methode getElementById()

    bspw. getElementsByTagName() könntest du hingegen darauf anwenden, denn das ist eine Methode von document und Elementknoten
     

  9. #9
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Okay, danke schön. Inzwischen habe ich es auch geschafft das ich gültiges XML geliefert bekomme. Ich hab nur noch vergessen den richtigen Header in PHP zu senden :P

    Jetzt ist die Frage was ich benutze. XML wäre zwar eleganter, nur das Problem ist das andere User Einträge machen können und also nicht valides gültiges XHTML eintragen können.

    Damit würde es dann gleich zu verarbeitungsfehlern kommen.
    Hmm, was benutz ich jetzt besser?
     

  10. #10
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Naja, optimal wäre natürlich, wenn du die Benutzereingaben so bearbeitest, dass sie valide sind, bevor sie auf die Welt losgelassen werden.

    Es muss ja nicht mal valides XHTML sein, valides XML ist ausreichend, damit responseXML etwas liefert.
     

  11. #11
    scrippi scrippi ist offline Mitglied
    Registriert seit
    Oct 2008
    Beiträge
    13
    Code :
    1
    2
    
    var dummy = document.createElement('div');
        dummy.innerHTML=xmlHttp.responseText;

    das hier kann nur funktionieren, wenn dummy in das Dokument auch integriert wird, zB über appendChild()
     

  12. #12
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Zitat Zitat von scrippi Beitrag anzeigen
    Code :
    1
    2
    
    var dummy = document.createElement('div');
        dummy.innerHTML=xmlHttp.responseText;

    das hier kann nur funktionieren, wenn dummy in das Dokument auch integriert wird, zB über appendChild()
    Da irrst du dich, es geht auch so!
     

  13. #13
    scrippi scrippi ist offline Mitglied
    Registriert seit
    Oct 2008
    Beiträge
    13
    Streite ich nich ab, hatte bei mir jedoch erst immer geklappt als es im document war...
     

  14. #14
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Hier mal eine Hilfsfunktion, welche ein HTML-Dokument anhand von HTML-Code erstellt und dies zurückliefert:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    <script type="text/javascript">
    <!--
    function loadHTML(strHTML)
    {
      var doc=null;
      if(document.all && !window.opera)//IE
      {
        doc=document.createDocumentFragment();
        doc.appendChild(doc.createElement('root'));
        doc.firstChild.innerHTML=strHTML;
      }
      else
      {
        if(document.implementation)
        {
          if(window.opera || typeof window.mozInnerScreenX!='undefined')//Opera + FF
          {
            doc=document.implementation.createDocument ('http://www.w3.org/1999/xhtml', 'root',  null);
            doc.documentElement.innerHTML=strHTML
          }
          else//chrome+safari
          {
            doc=document.implementation.createDocument ('http://www.w3.org/1999/xhtml', '',  null);
            var root=doc.createElement('root');
                    root.innerHTML=strHTML;
                    doc.appendChild(root);
          }
        }
      }
      return doc;
    } 
    //Kurzer test
    alert(loadHTML('<b><i id="elementID">Es geht</i></b>').getElementById('elementID').innerHTML);
     
     
    //-->
    </script>

    Der Test zeigt, auch getElementById() ist dort nutzbar.
    Getestet in
    FF3.6.8
    Opera9.5
    Win-Safari 5.0.1
    Chrome5.0
    IE6-8
    Geändert von Sven Mintel (07.09.10 um 15:57 Uhr)
    zer0 bedankt sich. 

  15. #15
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    Hey,
    vielen Dank für den Code. Ich habe es aber jetzt schon anders gelöst und klappt gut.

    Aber vllt hat jemand noch eine andere Idee wie ich mein select-Element "tauschen" kann. Ich will grad die ganzen option-Einträge gegen andere tauschen.

    Dafür habe ich auch eine Lösung, aber der Interesse halber, vllt hat ja noch jemand eine bessere.

    Hier meine Lösung:

    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    var response = xmlHttp.responseText; // Die ganze HTML Seite als Rückgabe
                
    var dummy = document.createElement('div'); // Dummyelement
    dummy.innerHTML = response; // HTML Code in das Dummy Element einfügen
                
    var selectElements = dummy.getElementsByTagName('select'); // Alle select-Element auswählen
    var selectElement = selectElements[0]; // Das erste (und einzige) auswählen
                
    var categorys = document.getElementById('category'); // Aus meiner HTML Seite das select-Element mit der ID category auswählen
                
    var categorysLength = categorys.length; // Anzahl der aktuellen option-Einträge
    var selectElementLength = selectElement.length - 1; // Anzahl der neuen option-Einträge - 1 sodass die Variable auf das letzte Element zeigen kann
                
    // Dem select-Element das neue Element hinzufügen 
    categorys.options[categorysLength] = selectElement.options[selectElementLength];

    Gruß
     

Ähnliche Themen

  1. [AJAX] kein Responsetext -> was mache ich falsch?
    Von klanawagna im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 04.10.10, 09:23
  2. Ajax Script macht nur responseText
    Von Da_Chris im Forum Javascript & Ajax
    Antworten: 12
    Letzter Beitrag: 21.07.10, 12:29
  3. Ajax ResponseText und alert
    Von maythefunkbewitu im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 27.05.09, 14:56
  4. [AJAX] responseText parsen
    Von StupidBoy im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 14.02.09, 11:59
  5. AJAX responseText senden
    Von hugo1981 im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 03.02.08, 22:10

Stichworte