kami-katze
Goto Top

Kleines Problem mit Übergabe von Variablen

Hallo,
ich habe mir ein kleines Script gebaut mit welchem ich Web2.0 like Inhalte in DIVs laden kann. Leider habe ich an einer Stelle ein Problem und bin mir unsicher warum dieses auftritt. Aber seht selbst:

Funktionierende Version meines Scripts:

Aufruf durch:
onclick="getcontent('content_offen.php');">  

Code:
function getHTTPObject()
                {
                var xmlhttp;
                if (!xmlhttp && typeof XMLHttpRequest != 'undefined')  
                               {
                               try
                                               {
                                               xmlhttp = new XMLHttpRequest();
                                               }
                               catch (e)
                                               {
                                               xmlhttp = false;
                                               }
                               }
                return xmlhttp;
                }
                var http = getHTTPObject(); // We create the HTTP Object
function getcontent(url)
                {
                http.open("GET", url, true);  
                http.onreadystatechange = handleHttpResponse;
                http.send(null);
                }
function handleHttpResponse()
                {
                var target = 'content';  
                if (http.readyState == 4)
                               {
                               if (http.responseText == undefined)
                                               {
                                               document.getElementById(target).innerHTML = '';  
                                               }
                               else
                                               {
                                               document.getElementById(target).innerHTML = http.responseText;
                                               }
                               }
                }

Nun möchte ich aber auch die ID des zu füllenden DIVs gleich im Aufruf mitgeben:

Also Aufruf durch:
onclick="getcontent('content_offen.php'##red|,'content'##);">  

Code:
function getHTTPObject()
                {
                var xmlhttp;
                if (!xmlhttp && typeof XMLHttpRequest != 'undefined')  
                               {
                               try
                                               {
                                               xmlhttp = new XMLHttpRequest();
                                               }
                               catch (e)
                                               {
                                               xmlhttp = false;
                                               }
                               }
                return xmlhttp;
                }
                var http = getHTTPObject(); // We create the HTTP Object
function getcontent(url,target)
                {
                http.open("GET", url, true);  
                http.onreadystatechange = handleHttpResponse(target);
                http.send(null);
                }
function handleHttpResponse(target)
                {
                if (http.readyState == 4)
                               {
                               if (http.responseText == undefined)
                                               {
                                               document.getElementById(target).innerHTML = '';  
                                               }
                               else
                                               {
                                               document.getElementById(target).innerHTML = http.responseText;
                                               }
                               }
                }

Das Problem liegt in Zeile 21. Hier ist es scheinbar nicht möglich meiner Funktion "handleHttpResponse" eine Variabele mitzugeben.
Ich hoffe ihr könnt mir helfen.

Grüße aus Hannoverface-smile
kami

Content-Key: 136249

Url: https://administrator.de/contentid/136249

Printed on: April 19, 2024 at 04:04 o'clock

Member: Snowman25
Snowman25 Feb 18, 2010 at 08:55:50 (UTC)
Goto Top
Bei der Formatierung weigere ich mich, den Text auch nur durchzulesen...
Ausserdem: ist onreadystatechange nicht ein event?
Events kannst du doch keinen Rückgabewert aus einem Funktionsaufruf zuweisen.

€dit:
Ausserdem kannst du mal hier schauen.
Member: nxclass
nxclass Feb 18, 2010 at 09:09:04 (UTC)
Goto Top
... dann lass Dir mal target in der Funktion handleHttpResponse mit alert() ausgeben.
Allgemein glaube ich das Du mal paar Ausgaben einbauen solltest (oder anderweitig dein Code debugst ( https://addons.mozilla.org/de/firefox/addon/1843 )

btw. Bitte auf die Darstellung achten bevor Du deinen Code abschickst.

Events kannst du doch keinen Rückgabewert aus einem Funktionsaufruf zuweisen
... ist schon OK so - wenn das Event auftritt wird die zugewiesene Funktion aufgerufen.
Member: kami-kaTze
kami-kaTze Feb 18, 2010 at 09:23:47 (UTC)
Goto Top
Habe die Darstellung gefixt ^.^

Ausserdem habe ich mitlerweile einen Weg gefunden das Problem zu lösen:
Und zwar sieht die problematische Zeile nun wie folgt aus:

http.onreadystatechange = new Function('target','handleHttpResponse("'+target+'")');  

Vieleicht kann mir jemand erklären wofür in diesem Teil des Codes die erste variabele (target) gut ist.

Edit: Alles in allem ein wenig seltsam das dies Funktioniert da ich ja quasi die Funktion ein weiteres mal anlege oder nicht?
Edit2: Ich hatte mir schon alerts eingebaut. Allerdings hat mir das target von handleHttpResponse (undifined) zurückgegeben. Wenn ich allerdings direkt über Zeile 21 einen altert von target mache bekam ich den korrekten Wert.

Grüße
Member: nxclass
nxclass Feb 18, 2010 at 09:33:25 (UTC)
Goto Top
schau mal da: http://de.selfhtml.org/javascript/objekte/function.htm

http.onreadystatechange = function(target)
{
  if (http.readyState == 4) {
    if (http.responseText == undefined) {
      document.getElementById(target).innerHTML = '';  
    } else {
      document.getElementById(target).innerHTML = http.responseText;
    }
  }
}
Member: kami-kaTze
kami-kaTze Feb 18, 2010 at 09:37:54 (UTC)
Goto Top
Habe ich schon,
ich verstehe allerdings nicht warum das funktioniert. Da ich in meinem Workaround ja zwei mal die Funktion handleHttpResponse erstelle..

Grüße
Member: nxclass
nxclass Feb 18, 2010 at 09:43:00 (UTC)
Goto Top
s. mein letzter Beitrag.
Dazu fehlen Dir wohl noch etwas Kenntnisse zur Objekt Orientierten Programmierung in Javascript.

Du hattest die Funktion aufgerufen ... so wird die Funktion zugewiesen.
Member: nxclass
nxclass Feb 18, 2010 at 09:48:31 (UTC)
Goto Top