Peter Hermann: AJAX-Funktion universell machen

Hallo,

ich nutze derzeit folgende Standard-AJAX-Funktion um Requests zu verarbeiten:

function macheRequest()

{

http_request=false;

if(window.XMLHttpRequest){http_request=new XMLHttpRequest();if(http_request.overrideMimeType){http_request.overrideMimeType('text/xml');}}else if(window.ActiveXObject){try{http_request=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{http_request=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){}}}
  if(!http_request){alert('XMLHTTP-Fehler!');return false;}

http_request.open('POST','refresh.php',true);
  http_request.onreadystatechange=ausgabe;
  http_request.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=ISO-8859-1');
 http_request.send('r='+Math.random());

}

Das Ergebnis landet dann in der Funktion ausgabe() wie man sieht.

Ich hätte nun aber gern eine universelle Funktion wo man bestimmen kann, in welcher Funktion die Ausgabe erfolgen soll.

Sowas in der Art wie:

function macheRequest(funktionsname,url)
{
...
}

Intern würde sich dann dies automatisch ändern:

http_request.open('POST',url,true);
http_request.onreadystatechange=funktionsname;

Allerdings kann man wohl nicht einfach so den funktionsnamen anhängen...

Was muss da konkret noch geändert werden oder geht meine Vorstellung überhaupt?

Danke,
Peter

  1. http_request=false;

    Prinzipiell würde ich es vermeiden mit globalen Variabeln zu arbeiten.

    http_request.open('POST','refresh.php',true);

    Ebenso AJAX nicht asynchron verwenden, dass ist ja gerade eines der Vorteile an AJAX (und Bestandteil des Namens) eben nicht auf die Rückgabe zu warten.

    Ich hätte nun aber gern eine universelle Funktion wo man bestimmen kann, in welcher Funktion die Ausgabe erfolgen soll.

    Sowas in der Art wie:

    function macheRequest(funktionsname,url)

    Der Parameter darf nicht ein String sein, sondern muss eine Referenz auf die Funktion sein.

    Das Prinzip ist so:

    function Test() {  
    alert('eine Funktion');  
    }  
    var Funktions_referenz = Test;  
    
    

    Struppi.

    1. Hi Struppi,

      Das Prinzip ist so:

      function Test() {

      alert('eine Funktion');
      }
      var Funktions_referenz = Test;

        
      Von dir hier sicher nur als Beispiel gebracht, aber da in den PHP-Threads so oft drauf hingewiesen wird, moechte ich es auch hier anmerken:  
        
      Diese "Umkopiererei" ist nicht notwendig, durch die Deklaration der Funktion mittels  
      
      > function Test() { ...  
      
      stellt Test bereits eine Referenz auf die Funktion dar.  
        
      Die kann jetzt also gerne einfach so mit an die "AJAX-Funktion" uebergeben werden:  
        
      ~~~javascript
        
      function macheRequest(funktionsname,url) {  
        // ....  
        http_request.open('POST',url,true);  
        http_request.onreadystatechange=funktionsname;  
      }  
        
      // Aufruf dann so:  
      macheRequest(Test, "http://example.com/")
      

      MfG ChrisB

      1. Das Prinzip ist so:

        function Test() {

        alert('eine Funktion');
        }
        var Funktions_referenz = Test;

        
        >   
        > Von dir hier sicher nur als Beispiel gebracht, aber da in den PHP-Threads so oft drauf hingewiesen wird, moechte ich es auch hier anmerken:  
        >   
        > Diese "Umkopiererei" ist nicht notwendig, durch die Deklaration der Funktion mittels  
          
        schon klar, dass Beispiel sollte nur demonstrieren was eine Funktionsreferenz in JS ist. Es ging mir nicht um die konkrete Frage.  
          
          
        Struppi.