Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 29
  1. #1
    chappy_berlin ist offline Eroberer
    registriert
    09-04-2010
    Beiträge
    55

    dynamische Funktionsnamen

    Hallo Leute!

    Bräuchte mal wieder einen Tip von Euch.

    Ich habe ein AJAX Script das auch soweit ordnungsgemäß funktioniert. Jetzt will ich den Ausgabeteil dynamisch gestalten.

    Im Moment schaut das ganze noch so aus:

    Code:
    			if (outfunction == 4) 
    			{
    				if (http.readyState == 4) 
    				{
    					var datenblock = http.responseText;
     					anbieterdatenblock(datenblock);
       				}
                             }
    Die Variable "outfunction" übergebe ich mit der Datenzeile die ich per AJAX Script verarbeiten lasse. Wie gesagt alles funktioniert!
    Jetzt will ich die äussere IF-Schleife weghaben. In der Variable "outfunction" soll jetzt der Name der aufgerufenen Funktion stehen.

    Die Zeile "anbieterdatenblock(datenblock);" soll so aussehen: "outfunction(datenblock);". Dabei soll die Variable
    -outfunction- den Wert enthalten und den Inhalt haben:"anbieterdatenblock". Sprich der Funktionsname ist
    dynamisch! Geht das und wenn ja wie?

  2. #2
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.757

    AW: dynamische Funktionsnamen

    Warum willst du mit dem Funktionsnamen arbeiten? Arbeite doch mit Funktionsreferenzen:
    Code:
    function test(){alert(1);}
    function test1(func){
    	func();
    }
    
    test1(test);

  3. #3
    chappy_berlin ist offline Eroberer
    registriert
    09-04-2010
    Beiträge
    55

    AW: dynamische Funktionsnamen

    Hab mit sowas noch nicht gearbeitet. Das würde dann wie ausschauen? Habe zum Beispiel die funktion geschlecht(gsw),anbieter(),erfasst(ew).
    Bei PHP könnte man ein solches Konstrukt für den Namen nutzen ${$test}. Aus dem resultierend hatte ich mir sowas auch in JS vorgestellt!
    Geändert von chappy_berlin (22-04-2011 um 15:10 Uhr)

  4. #4
    Avatar von Junkee[]
    Junkee[] ist offline Lounge-Member
    registriert
    08-05-2009
    Ort
    Leonberg
    Beiträge
    3.169

    AW: dynamische Funktionsnamen

    Zitat Zitat von chappy_berlin Beitrag anzeigen
    Das würde dann wie ausschauen? Habe zum Beispiel die funktion geschlecht(gsw),anbieter(),erfasst(ew).
    Code:
    function ajax(callback) {
      ...
      if (http.readyState == 4) 
      {
        callback(http.responseText);
      }
    }
    
    ajax(geschlecht);
    ajax(anbieter);
    ...
    
    function anbieter(text) {
      
    }

  5. #5
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.757

    AW: dynamische Funktionsnamen

    So ein ähnliches Konstrukt wie in PHP kann man in JS auch machen - empfiehlt sich aber nicht und ist über Callbacks viel eleganter und einfacher.

  6. #6
    chappy_berlin ist offline Eroberer
    registriert
    09-04-2010
    Beiträge
    55

    AW: dynamische Funktionsnamen

    Bitte um Hilfe!

    Sorry, bin erst jetzt dazu gekommen mich mit dieser Baustelle konkret wieder zu beschäftigen!

    Das komplette Ajax-Tool schaut folgendermaßen aus

    Code:
    function datenconnect(file, datacontent, outpart, outfunction){
        
        var http = null;
        if (window.XMLHttpRequest) {
            http = new XMLHttpRequest();
        }
        else 
            if (window.ActiveXObject) {
                http = new ActiveXObject("Microsoft.XMLHTTP");
            }
        if (http != null) {
            http.open("POST", file, true);
            http.onreadystatechange = ausgeben;
            http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            http.send(datacontent);
        }
        
        function ausgeben()
                     {
    			if (outfunction == 4) 
    			{
    				if (http.readyState == 4) 
    				{
    					var datenblock = http.responseText;
     					anbieterdatenblock(datenblock);
       				}
    		         }
                       }

    Über den Teil "outfunction" wird momentan noch ein Wertübertragen, den ich vorher definiere und in der ausgabefunction steht die jeweils weiterverarbeitende Funktion. In diesem Fall "anbieterdatenblock". Im Endresultat heißt das, daß ich momentan innerhalb der Ausgabefunktion 20 if - Konstruktionen habe.

    Jetzt soll über die Variable "outfunction" bereits der Name der Weiterverarbeitungsfunktion übermittelt werden und in der Ausgabefunktion "ausgeben" soll nur noch folgendes stehen

    Code:
        function ausgeben()
                     {
    		 if (http.readyState == 4) 
    			{
    			var datenblock = http.responseText;
    			outfunktion(datenblock);
    			}
    	          }
    Aber dazu brauche ich eben den dynamischen Funktionsnamen. Habe es mit der oben aufgeführten Callback Funktion probiert, aber da kommt immer nur "callback is not a function" oder "callback is undefined". Was mache ich falsch???

  7. #7
    Avatar von jspit
    jspit ist offline Lounge-Member
    registriert
    19-06-2009
    Beiträge
    1.712

    AW: dynamische Funktionsnamen

    Wenn Funktionsnamen als string vorliegen, kann der "dynamische" Aufruf elegant über den Umweg einer Objectdeclaration realisiert werden:
    Code:
    function fkt1(){alert("Hier ist fkt1")}
    function fkt2(){alert("Hier ist fkt2")}
    fo={"fkt1":fkt1,"fkt2":fkt2};
    fctname="fkt2";
    fo[fctname]();
    Diesen Code sofort mit dem Javascript Online Tool teststen.

    jspit

  8. #8
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: dynamische Funktionsnamen

    Zitat Zitat von chappy_berlin Beitrag anzeigen
    Aber dazu brauche ich eben den dynamischen Funktionsnamen. Habe es mit der oben aufgeführten Callback Funktion probiert, aber da kommt immer nur "callback is not a function" oder "callback is undefined". Was mache ich falsch???
    Nein brauchst du nicht. Du musst eine Funktionsreferenz der Funktion datenconnect() übergeben.

  9. #9
    chappy_berlin ist offline Eroberer
    registriert
    09-04-2010
    Beiträge
    55

    AW: dynamische Funktionsnamen

    Es will einfach nicht funktionieren!

    jspit:

    Bei deiner Lösung kommt leider immer wieder "fo is not defined" obwohl es in der online testversion hervoragent funktioniert. Schätze mal, da meine Funktionen in seperaten Files liegen, kommt das Problem.

    ein schlauer:

    Habe leider keine Ahnung wie ich das anstellen soll. Habe den ganzen Tag heute rumprobiert und es gibt nur Fehlermeldungen.

    Hier die letzte Version der Ausgabefunktion

    Code:
    	function ausgeben(outfunction)
    	{
    		if (http.readyState == 4) 
    			{
    			var datenblock = http.responseText;
    			 elements[outfunction].(datenblock);
    			}
    		
    	
    	}

  10. #10
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.757

    AW: dynamische Funktionsnamen

    Zeig' mal bitte ein komplettes Minimalbeispiel. Ich glaube einfach, dein Funktionsaufruf ist falsch.

  11. #11
    Avatar von jspit
    jspit ist offline Lounge-Member
    registriert
    19-06-2009
    Beiträge
    1.712

    AW: dynamische Funktionsnamen

    Zitat Zitat von chappy_berlin Beitrag anzeigen
    Bei deiner Lösung kommt leider immer wieder "fo is not defined" obwohl es in der online testversion hervoragent funktioniert. Schätze mal, da meine Funktionen in seperaten Files liegen, kommt das Problem.
    Daran liegt es nicht, denn dann kommt "Error: fo[fctname] is not a function". Ich stimme kkapsner zu, ohne ein komplettes und damit nachvollziehbares Minimalbeispiel können wir nicht helfen.

  12. #12
    chappy_berlin ist offline Eroberer
    registriert
    09-04-2010
    Beiträge
    55

    AW: dynamische Funktionsnamen

    Hier zum Beispiel die komplette Funktion, die beim Laden des Bodys ausgeführt wird.


    Code:
    function startpart()
    	{
    	datenconnect(file=file03,datacontent="",outpart="",outfunction="uebersichtcontent");
    	}
    Alle anderen Aufrufe der Ajaxfunktion sind analog.

    Variablenauflistung
    file = enthält den Namen des entsprechenden php files für die Datenver- bzw Datenbeartbeitung
    datacontent = enthält nach Bedarf Variablen und Werte die an das php file für die Datenver- bzw Datenbeartbeitung gesendet werden
    outpart = enthält nach Bedarf den Namen/ID des DIV Containers, wo die Daten ausgegeben werden sollen

    bis dahin funktioniert alles super!

    Jetzt soll die Variable 'outfunktion', die die entsprechende Ausgabefunktion erhält, angesprochen werden. Im Ajax Modul kommt auch der richtige Inhalt an.

    Hier nochmal des komplette Ajaxmodul

    Code:
    function datenconnect(file, datacontent, outpart, outfunction){
    	
    	var http = null;
    	if (window.XMLHttpRequest) {
    		http = new XMLHttpRequest();
    	}
    	else 
    		if (window.ActiveXObject) {
    			http = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	if (http != null) {
    		http.open("POST", file, true);
    		http.onreadystatechange = ausgeben;
    		http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    		http.send(datacontent);
    	}
    	
    	function ausgeben(outfunction)
    	{
    		if (http.readyState == 4) 
    			{
    			var datenblock = http.responseText;
    			 elements[outfunction].(datenblock);
    			}
    		
    	
    	}
    }
    Jetzt enthält der Funktionsaufruf "datacontent" unterschiedliche Ausgabefunktionen, welche in der Variable "outfunction" hinterlegt sind. Je nach welchem Click sie aufgerufen wird. Jetzt soll die entsprechende Weiterverarbeitungsfunktion aus der Ajaxausgafunktion gestartet werden. In PHP würde das ganze so aussehen: $[$outfunction]. Spricht anstatt übersicht(datenblock), selectbereich(datenblock) etc. soll jetzt nur outfunction.(datenblock) stehen und die Variable "outfunction" enthält die Werte übersicht, selectbereich etc.

  13. #13
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: dynamische Funktionsnamen

    Zitat Zitat von chappy_berlin Beitrag anzeigen
    Hier zum Beispiel die komplette Funktion, die beim Laden des Bodys ausgeführt wird.


    Code:
    function startpart()
    	{
    	datenconnect(file=file03,datacontent="",outpart="",outfunction="uebersichtcontent");
    	}
    Das ist kein gültiger JS Code. Kannst du uns nicht sagen, was wie dein Code aussieht, der diese Funktion aufruft?

  14. #14
    Avatar von jspit
    jspit ist offline Lounge-Member
    registriert
    19-06-2009
    Beiträge
    1.712

    AW: dynamische Funktionsnamen

    Warum soll dies kein gültiges JS sein? Mal abgesehen von file3 was existieren sollte. Es werden so nur völlig unnütz globale Varablen erzeugt (file,...)

  15. #15
    Avatar von jspit
    jspit ist offline Lounge-Member
    registriert
    19-06-2009
    Beiträge
    1.712

    AW: dynamische Funktionsnamen

    Ich sehe kein Grund, die fkt nicht als referenz zu übergeben
    Code:
    function fkt1(daten){alert(daten)}
     :
    //aufruf so fkt1 ohne ""
    datenconnect("file03","","",fkt1);
      :
    //in der fkt datenconnect
      :
    var datenblock = http.responseText;
    outfunction(datenblock);
      :
    Hier noch ein Online-Beispiel für die Parameterübergabe einer Functionsreferenz
    Geändert von jspit (15-07-2011 um 15:28 Uhr) Grund: Beispiel ergänzt

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Dynamische URL
    Von martl666 im Forum JavaScript
    Antworten: 7
    Letzter Beitrag: 09-01-2009, 14:26
  2. Dynamische Funktionsnamen
    Von tobi-848 im Forum JavaScript
    Antworten: 7
    Letzter Beitrag: 30-10-2008, 11:11
  3. Konstanten / Funktionsnamen etc.
    Von stormwind im Forum Serverseitige Programmierung
    Antworten: 2
    Letzter Beitrag: 09-10-2007, 22:00
  4. Dynamische Url
    Von DerPaul im Forum JavaScript
    Antworten: 8
    Letzter Beitrag: 27-08-2007, 22:04
  5. Antworten: 30
    Letzter Beitrag: 11-10-2006, 10:19

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •