neue Javascript Funktionen mittels AJAX

Das heißt du bekommst obwohl du die funktion innerhalb der onreadystate mit eval registrierst, wenn du sie außerhalb dieser Funktion aufrufen willst die Fehlermeldung, dass diese Funktion nicht existiert - aber innerhalb der onreadystate Funktion kann sie ausgeführt werden?
- Also ein Problem mit dem Gültigkeitsbereich - kann es vielleicht sein wenn du mit Iframes arbeitest, dass du die Funktion für das Hauptfenster registrierst - diese aber von einem Iframe aus aufgerufen wird?
 
ja genau, so ist stand der lage. wie kann ich denn in erfahrung bringen in welchem gültigkeitsbereich die funktion definiert wurde. also in der onreadystate-funktion kann ich z.B. die test0() funktion einfach mit test0() aufrufen. also ohne jetzt zum beispiel parent.test0() sagen zu müssen.

ich hab dir hier mal die bisherige fassung meiner onreadystate-funktion angehangen. vielleicht siehst du ja etwas, was mir bisher entgangen ist.

Code:
function setContent() 
{
	if (http_request.readyState == 4) 
	{
		if (http_request.status == 200) 
		{
			var outnode = parent.servlet.document.getElementsByTagName("body")[0];
			var pagecontent = http_request.responseXML.getElementsByTagName("content")[0];
												
			if(pagecontent.getAttribute("action",0) == "clear")
			{
				outnode.innerHTML = "";
			}
						
			var txt = http_request.responseText;
			var htmlbegin = getindex(txt , '>', 'f', 3);
			var htmlend = getindex(txt , '<', 'b', 2);
						
			if(htmlbegin != -1 && htmlend != -1)
			{
				var s = parent.servlet.document.createElement('script');
				s.setAttribute('type','text/javascript');
				s.text="";
				var a = http_request.responseXML.getElementsByTagName("script");
				for(i=0;i<a.length;++i)
				{
					var knoten = a[i].firstChild;
					while(knoten != null)
					{
						s.text+=knoten.nodeValue;
						knoten = knoten.nextSibling;
					}
				}
				
				eval(s.text);

				var tmp = txt.slice(htmlbegin,htmlend);
				
				outnode.innerHTML = outnode.innerHTML + tmp;

				parent.servlet.smoothScroll()
			}
			else
			{
				alert("Beim Parsen der Serverantwort trat ein Fehler auf");
			}
						
		} 
		else
		{
			alert('Bei dem Request ist ein Problem aufgetreten.');
		}
	}
}
 
@AMoKx666: Bitte halte dich an die Netiquette bzgl. der Groß- und Kleinschreibung, so wie du es zu Beginn des Threads unter Beweis gestellt hast. Vielen Dank. ;)
 
Ich würde probieren in der onreadystate Funktion, den Iframe in dem die Funktion ausgeführt werden soll als Objekt zu erhalten und das ganze mit
HTML:
iframeobjekt.eval('string');
zu registrieren.
Ich bin da allerdings über einen Link gestolpert in dem jemand ein ähnliches Problem mit dem Scope von eval hatte und keine Browserübergreifende Lösung dafür fand http://forum.de.selfhtml.org/archiv/2006/11/t141155/

Sollte das ganze mit eval nicht klappen, würde es noch den Ansatz geben aus der neu gerenderten Seite via Dom den Link zu filtern und entweder den src von "javascript: test1();" auf "javascript: eval('string); test1();" zu manipulieren, oder schöner - den Link durch ein anderes element zu ersetzen und diesem mittels "addEventListener" (bzw. "attachEvent") die Funktion als onclick Ereignis anzuhängen.
Ich verwende dafür immer folgende (nicht selbst geschriebene) Funktion:
HTML:
function addEvent( obj, type, fn )
{
   if (obj.addEventListener) {
      obj.addEventListener( type, fn, false );
   } else if (obj.attachEvent) {
      obj["e"+type+fn] = fn;
      obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
      obj.attachEvent( "on"+type, obj[type+fn] );
   }
}
 
@hans jörg:
Vielen, vielen Dank hans jörg. Du bist einfach der Beste ...

@Maik:
Ich gelobe Besserung. War keine böse Absicht oder so, sondern einfch nur Angewohnheit.
 
Gern,
nur aus Interesse falls ichs auch mal brauche - hat
HTML:
iframeobjekt.eval('string');
geklappt?
Laut dem Beitrag vom SELFHTML Forum sollte das nämlich im IE nicht funktionieren.
 
Das hat geklappt, allerdings kann ichs im IE nicht testen, weil ich unter Linux arbeite und die Webapplikation überhaupt nicht für den IE ausgelegt wurde.
 
Zuletzt bearbeitet:
Zurück