Filiz: Ajax HTML Response

Hallo,

ich sitze grad an folgendem Problem fest:

Wie ich mit Ajax eine XML Response verarbeite weiß ich.
Was ist aber wenn mir der Server folgendes schickt:

<html>
<head>
<title>Antwortseite</title>
</head>
<body>
Stadtname
</body>
</html>

also ein ganzes html dokument- ich brauche aber nur stadtname

um das zu parsen habe ich folgendes versucht:
var cityname = http.responseText;
var dummy = document.createElement("html");
dummy.innerHTML = cityname;

wenn ich jetzt mit dom befehlen auf diesem objekt arbeiten will klappt das nicht.
hinzu kommt, dass alert(dummy.innerHTML)anschließend folgendes liefert:
<title>Antwortseite</title>
Stadtname

ich benutze firefox 3.6.13

was ist da passiert? und wie mache ich es besser?

  1. Hallo,

    Was ist aber wenn mir der Server folgendes schickt:
    also ein ganzes html dokument- ich brauche aber nur stadtname
    was ist da passiert?

    Da passt die Response nicht zum Request.

    und wie mache ich es besser?

    Lege einen eindeutigen Request_Uri fest, auf welchem eine Response kommt, die Du im DOM (callback-Funktion) verarbeiten kannst.

    Hotti

    --
    Das Programm macht was es soll, aber es ist nicht das was du willst.
    1. Das Problem ist nicht, dass ich nciht weiß wie cih den Aufruf mache, sondern wir ich die Antwort weiterverarbeite.
      Aus diesem Grund habe ich das alles weggelassen. Zur Vollständigkeit:
      function sendReq(){
       var q = document.eingabe.plz.value
       q = encodeURIComponent(q);
       http.open("GET","plz.php?plz="+q);
       http.onreadystatechange = output;
       http.send(null);
      }

      function output(){
       if(http.readyState==4){
        var cityname = http.responseText;
        alert(cityname); //das ist der html code
        var dummy = document.createElement("html"); //hier erzeuge ich neues html element
        dummy.innerHTML = cityname; // in dieses packe ich die response
        alert(dummy.innerHTML);//hier tritt das Problem auf, dass die tags html,head,body weg sind

      }
      }

      Hallo,

      Was ist aber wenn mir der Server folgendes schickt:
      also ein ganzes html dokument- ich brauche aber nur stadtname
      was ist da passiert?

      Da passt die Response nicht zum Request.

      und wie mache ich es besser?

      Lege einen eindeutigen Request_Uri fest, auf welchem eine Response kommt, die Du im DOM (callback-Funktion) verarbeiten kannst.

      Hotti

      1. dummy.innerHTML = cityname; // in dieses packe ich die response
          alert(dummy.innerHTML);//hier tritt das Problem auf, dass die tags html,head,body weg sind

        warum extrahierst du den Stadtnamen nicht über simple Stringverarbeitung (suche nach <body> und </body> alles dazwischen weiter verarbeiten)

        1. Hallo,
          danke für den Tipp. Das ist sicherlich eine Möglichkeit. Sobald das HTML Gerüst jedoch größer wird ist das keine Möglichkeit mehr.

          Daher wäre ein Ansatz schön, bei dem ich mir einen DOM Baum aus meinem Antwortstring bastel und auf diesem arbeite.
          Das ganze am besten ohne zusätzliche Frameworks.

          dummy.innerHTML = cityname; // in dieses packe ich die response
            alert(dummy.innerHTML);//hier tritt das Problem auf, dass die tags html,head,body weg sind

          warum extrahierst du den Stadtnamen nicht über simple Stringverarbeitung (suche nach <body> und </body> alles dazwischen weiter verarbeiten)

          1. warum extrahierst du den Stadtnamen nicht über simple Stringverarbeitung (suche nach <body> und </body> alles dazwischen weiter verarbeiten)

            ...

            Daher wäre ein Ansatz schön, bei dem ich mir einen DOM Baum aus meinem Antwortstring bastel und auf diesem arbeite.

            bei "alles dazwischen weiter verarbeiten" kannst du auch "innerHTML" einsetzen - wo ist also das genaue Problem?

      2. hi,

        Das Problem ist nicht, dass ich nciht weiß wie cih den Aufruf mache, sondern wir ich die Antwort weiterverarbeite.

        Wenn die Antwort ein komplettes HTML-Dokument ist, zumal noch fehlerbehaftet, ist das Müll. Den zu verarbeiten lohnt nicht.

        http.open("GET","plz.php?plz="+q);

        Hier musst Du ansetzen, bzw. in 'plz.php'. Die Kontrollstruktur in diesem Script muss so funktionieren, dass dem Parameter 'plz' exact eine Ajax-Response zugeordnet ist. D.h. nicht unbedingt, dass die Kontrollstruktur falsch ist, es kann auch sein, dass Parameter 'plz' in anderen Requests vorkommt, die z.B. auf Parameter 'foo' kontrolliert werden. Guck Dir an, welche Parameter im Spiel sind und schaffe klare Verhältnisse.

        Hotti

        1. die plz.php + ihre response wird als gegeben betrachtet.
          insofern ist weder aufgeben noch verändern eine option ;-)
          ich MUSS also mit diesem html code den ich zurückkrieg weiterarbeiten.

          hi,

          Das Problem ist nicht, dass ich nciht weiß wie cih den Aufruf mache, sondern wir ich die Antwort weiterverarbeite.

          Wenn die Antwort ein komplettes HTML-Dokument ist, zumal noch fehlerbehaftet, ist das Müll. Den zu verarbeiten lohnt nicht.

          http.open("GET","plz.php?plz="+q);

          Hier musst Du ansetzen, bzw. in 'plz.php'. Die Kontrollstruktur in diesem Script muss so funktionieren, dass dem Parameter 'plz' exact eine Ajax-Response zugeordnet ist. D.h. nicht unbedingt, dass die Kontrollstruktur falsch ist, es kann auch sein, dass Parameter 'plz' in anderen Requests vorkommt, die z.B. auf Parameter 'foo' kontrolliert werden. Guck Dir an, welche Parameter im Spiel sind und schaffe klare Verhältnisse.

          Hotti

  2. Hi,

    Wie ich mit Ajax eine XML Response verarbeite weiß ich.
    Was ist aber wenn mir der Server folgendes schickt:

    <html>
    <head>
    <title>Antwortseite</title>
    </head>
    <body>
    Stadtname
    </body>
    </html>

    also ein ganzes html dokument- ich brauche aber nur stadtname

    Schau mal z.B. bei jQuery: Loading Page Fragments.
    In jQuery scheint es (ich habe es selber noch nicht benutzt) relativ einfach möglich zu sein, schau also mal in die jQuery-Sourcen rein oder nutze das Framework einfach direkt.

    Bis die Tage,
    Matti