Steffen: Return aus 'anonymer' Funktion zurück geben

Hallo,
ich arbeite gerade mit AJAX, und habe jetzt so ein gebilde:

  
function submitForm(form, ziel)  
{  
  var http = null;  
  
  if(window.XMLHttpRequest)  
    http = new XMLHttpRequest();  
  else if (window.ActiveXObject)  
    http = new ActiveXObject("Microsoft.XMLHTTP");  
  
  http.onreadystatechange = function()  
  {  
    if(http.readyState == 4)  
      {  
      if(http.responseText == 1)  
         {  
         form.submit(); //Bisherige Lösung  
         return true;  
  }  
 else  
   {  
          alert("Falsches Passwort");  
   return false;  
   }  
 }  
    else  
     return;  
  };  
  
  
  http.open('POST', ziel, true);  
  
  var post = getFormValues(form);  
  
  http.setRequestHeader('Content-Type',  
    'application/x-www-form-urlencoded');  
  http.send(post);  
  return false;  
}  

Also diese Funktion wird bei einem Submit eines Formulars aufgerufen.
Ich möchte es jetzt so, dass falls http.onreadystatechange(); false zurück gibt, die ganze Funktion (submitForm) auch false zurück gibt.
Das gleiche für true als Rückgabe.

Weiß einer wie ich das Lösen kann?

Grüße
Steffen

  1. hi,

    Ich möchte es jetzt so, dass falls http.onreadystatechange(); false zurück gibt, die ganze Funktion (submitForm) auch false zurück gibt.

    M.E. so gar nicht möglich.
    Deine Funktion submitForm "wartet" ja nicht auf das eintreten des Handler-Ereignisses - die setzt den Request ab, definiert den Handler, und gut is'.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,
      ah ok danke.
      Andere Möglichkeit wäre ja:

        
      function nr1() {  
       var name = false;  
        
       //....  
       http.onreadystatechange = function()  
        {  
        //Hier hackt es bei mir  
        name= true;  
        }  
        
       return name;  
       }  
      
      

      Denn das return name; erfolgt erst nachdem onreadystatechange fertig ist.
      Aber wie verändern ich jetzt Variablen Werte in der 1. Funktion?

      Grüße
      Steffen

      1. Denn das return name; erfolgt erst nachdem onreadystatechange fertig ist.
        Aber wie verändern ich jetzt Variablen Werte in der 1. Funktion?

        Das geht nicht, wenn ich das richtig verstehe ist onreadystatechange eine event Handler, der zu einem komplett anderen Zeitpunkt aufgerufen wird dann ist deine Funktion nrl() schon lange beendet.

        Struppi.

        1. hi,

          Das geht nicht, wenn ich das richtig verstehe ist onreadystatechange eine event Handler, der zu einem komplett anderen Zeitpunkt aufgerufen wird dann ist deine Funktion nrl() schon lange beendet.

          Ja, so ist es m.W.

          Deshalb heißt es ja auch AJAX und nicht SJAX.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Hallo,

            Deshalb heißt es ja auch AJAX und nicht SJAX.

            AJAX ist ein Modewort für ein umfassendes UI-Konzept, das man nicht verwenden sollte, wenn man einfach nur von Remote Scripting spricht.

            Die Technik dahinter heißt XMLHttpRequest. Und diese erlaubt sowohl asynchrones als auch synchrones Arbeiten und kann in vielen anderen Zusammenhängen verwendet werden, die mit AJAX nicht notwendigerweise etwas zu tun haben.

            Der vierte Parameter der open()-Methode gibt an, ob der Request asynchron oder synchron ausgeführt werden soll.

            http.open('POST', ziel, false);
            ...
            http.send(post);
            und schon haben wir eine synchrone Ausführung, wodurch der nächste Befehl direkt auf http.responseText zugreifen kann und entsprechend return true oder return false ausführen kann.

            Allerdings sehe ich nicht, was an der ursprünglich geposteten asynchronen Variante sonderlich schlechter sein sollte.

            Mathias

            1. Hallo,

              AJAX ist ein Modewort für ein umfassendes UI-Konzept, das man nicht verwenden sollte, wenn man einfach nur von Remote Scripting spricht.

              AJAX & Interface Design illustriert den UI-Ansatz.

              Der vierte Parameter der open()-Methode gibt an, ob

              ^^^^^^

              der Request asynchron oder synchron ausgeführt werden soll.

              http.open('POST', ziel, false);

              Der dritte Parameter ist hier gemeint. Es koennen auch noch optional Loginname und Passwort als 4. und 5. Parameter uebergeben werden.

              MfG, Thomas

              1. Der vierte Parameter der open()-Methode gibt an, ob
                       ^^^^^^
                der Request asynchron oder synchron ausgeführt werden soll.

                http.open('POST', ziel, false);

                *ggg* Danke für die Korrektur.

                Mathias

            2. hi,

              Der vierte Parameter der open()-Methode gibt an, ob der Request asynchron oder synchron ausgeführt werden soll.

              Ja, über den war ich kurze Zeit später dann auch noch gestolpert.

              und schon haben wir eine synchrone Ausführung, wodurch der nächste Befehl direkt auf http.responseText zugreifen kann und entsprechend return true oder return false ausführen kann.

              Funktioniert das in den gängigen Implementierungen problemlos?

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. Hallo,

                Funktioniert das in den gängigen Implementierungen problemlos?

                Ja, sofern die Antwort vom Server schnell genug kommt und die Verarbeitung das Skript im Client nicht zum Haengen bringt. Um dieses Risiko zu vermeiden, wird die asynchrone Kommunikation bevorzugt.

                Die Abfrage von readyState (0=uninitialized ... 4=complete) ueber den Event-Handler onreadystatechange ist das probate Mittel.

                MfG, Thomas