Thomas: getElementById erhält angeblich kein Objekt

Hi,
ich arbeite gerade an einer kleinen Ajax Anwendung, welche momentan noch auf das einfachste reduziert ist. Sie funktioniert auch soweit und der responseText kommt erfolgreich an. Er besteht dabei aus einer ID eines Elements der Seite, einem Trennzeichen (hier $%$) und dem restlichen Text, welcher nachher in die Seite eingefügt werden soll.
Probleme macht dabei die ID, welche ich durchaus in einem Alert anzeigen kann, die aber von getElementById nicht akzeptiert wird. Der Fehler gibt dabei aus das es null oder undefined ist.
Für die Lösung des Problems und anderweitige Verbesserungsvorschläge bin ich dankbar (Javascript ist bisher weniger mein Ding).

  
function handleResponse()  
{  
 if(resOb.readyState == 4)  
 {  
  response = resOb.responseText;  
  till = response.indexOf('$%$');  
  id = response.substring(1, till);  
  string = response.substring(till+3);  
  document.getElementById(id).innerHTML = string;  
 }  
}
  1. Probleme macht dabei die ID, welche ich durchaus in einem Alert anzeigen kann, die aber von getElementById nicht akzeptiert wird. Der Fehler gibt dabei aus das es null oder undefined ist.

    Was genau ist null oder undefined? Was denn nun, null oder undefined?
    null ist der Rückgabewert von getElementById, wenn es kein Element mit der angegebenen ID gefunden hat.
    undefined gibt getElementById eigentlich nie zurück.

    response = resOb.responseText;

    Du solltest lokale Variablen notieren, mit var davor.

    Ansonsten überprüfe mal genauer, was bei deinen Operationen herauskommt:

    id = response.substring(1, till);

    alert("'" + id + "'\n" + typeof(id) + "\n" + id.length);

    document.getElementById(id).innerHTML = string;

    var elem = document.getElementById(id);
    alert(elem + "\n" + typeof elem);
    alert(elem.nodeType); // schlägt fehl wenn elem kein object ist.

    Mathias

    1. Was genau ist null oder undefined? Was denn nun, null oder undefined?
      null ist der Rückgabewert von getElementById, wenn es kein Element mit der angegebenen ID gefunden hat.
      undefined gibt getElementById eigentlich nie zurück.

      Hast natürlich recht, war von mir nicht wirklcih richtig angegeben. getElementById gibt null zurück (irgend ein Browser hatte glaub auch undefined in der Fehlerkonsole gemeint).

      Du solltest lokale Variablen notieren, mit var davor.

      Hab ich gemacht

      Ansonsten überprüfe mal genauer, was bei deinen Operationen herauskommt:

      id = response.substring(1, till);

      alert("'" + id + "'\n" + typeof(id) + "\n" + id.length);

      Das hat etwas interessantes ergeben. Laut diesem Alert ist der Ergebnis String (der vom optischen her auch korrekt ist) 8 Zeichen lang. In Wahrheit besitzt er jedoch nur 7 Zeichen. Offenbar hängt an dem String (vorne oder hinten) noch ein weiteres nicht sichtbares Zeichen.
      Ein wenig rumspielen ergab dann folgendes:

      var id = response.substring(2, till);

      Jetzt funktioniert alles. Vielen Dank für deine Hilfe und Anregungen.

      1. Jetzt funktioniert alles. Vielen Dank für deine Hilfe und Anregungen.

        Habe ich doch gern gemacht.

        Viel Glück weiterhin.

        Gruss
        Mega

        1. Mist, jetzt habe ich aus Versehen mit meinem Alter Ego gepostet! Es darf doch keiner merken, dass ich »Mega« bin!

          Mathias

          1. Hallo Megalily!

            Soso...

            Es darf doch keiner merken, dass ich »Mega« bin!

            Admins spielen verstecken... soso...

            Viele Grüße aus Frankfurt, oder?
            André

            --
            _ - diesseits vom delirium - _
  2. Ich hatte eine ganz ähnliche Aufgabenstellung. Allerdings habe ich's mir leicht gemacht und ":" als Trennzeichen verwendet. objekt.responseText() stört sich ja nicht dran.

    Anschliessend habe ich einfach nach ":" gesplittet und ein Array draus gebaut:
      var vektor = response.split(":");
    was ich bequem verwenden konnte :)

    übrigens habe ich (dank Forenhilfe) eine Callbackfunktion in den Request eingebaut, so kann ich alle Ajaxfunktionen in eine .js auslagern, sie so belassen wie sie ist und -- für andere Zwecke weiterverwenden :) siehe:

    http://forum.de.selfhtml.org/?t=178153&m=1174441