ajax und switch

Nord-Süd-Richtung

Erfahrenes Mitglied
Hi

ich stehe hier vor einem Problem, was mein (geringes) js know-how komplett überfordert.
Javascript:
 req.open("GET", url, true);
   req.onreadystatechange = function(){
      alert("Status: "+req.readyState +" "+i);
      switch(req.readyState){
         case 4:
            if(req.status!=200){
               alert("Fehler:"+req.status);
               break;
            }
            else{
               return req.responseText;
               break;
            }
            break;
         default:
            alert('Wird auch noch ausgeführt');
            return false;
            break;
      }
   };
Die switch-Abfrage wird insgesamt 5mal ausgeführt - statt einmal. Es wird 4 mal der Text 'Wird auch noch ausgeführt' ausgegeben. Die ganze Ajax Requestftunktion wird aber nur einmal aufgerufen. Das erste alert (mit readyState) gibt beim 1.mal 1 1 aus (die zweite 1 steht für die anzahl der durchläufe), dann 2 1, 3 1, 4 1, 1 1 aus.
Wieso wird die Funktion so oft durchlaufen?

edit:
Was mir noch aufgefallen ist:
Sobald das erste Alert-Fenster aufblink, ändert sich der Text :suspekt: von 1 1 auf 2 1.
 
Zuletzt bearbeitet:
Moin,

die Erklärung dafür ist recht einfach: bis eine Ressource fertiggeladen ist, nimmt sie verschiedene Ladezustände an:
uninitialized
loading
loaded
interactive
complete

bei jedem feuert der onreadystatechange-Event und dein switch endet im default:)

Verlasse die Funktion gleich zum Anfang, wenn der readyState nicht den Wert 4 hat, denn erst dann ist die Anfrage abgeschlossen :)
 
Meinst du so? Da komme ich wieder zu dem return false...
Javascript:
req.onreadystatechange = function(){
      if( req.readyState != 4 ){
         return false;
      }
      else{
         if(req.status!=200){
            alert("Fehler:"+req.status);
         }
         else{
            return req.responseText;
         }
      }
   };
 
Ich habe in der Zwischenzeit den Code nochmal überarbeitet. Das Problem: Es wird die entsprechende PHP Datei(die existiert) nicht in den Container gelesen (der auch existiert). Es steht immer undefined da:
Javascript:
req.onreadystatechange = function(){
      if( req.readyState == 4 ){
         if(req.status!=200){
            alert("Fehler:"+req.status);
         }
         else{
            alert(req.readyState);
            alert(req.responseText);
            return req.responseText;
         }
      }
   };
 
Ich sehe da auch nichts, was etwas in einen Container eintragen würde.:-(

Was gibt denn dort
Code:
            alert(req.readyState);
aus?

Und wozu überhaupt der Rückgabewert...wer soll diesen denn in Empfang nehmen?
 
Das wird so nicht funktionieren, ich nehme mal an , request() ist die Funktion, welche req initialisiert. Diese wird aber verlassen, sobald die Anfrage gesendet wurde, und hat nichts mit der Antwort zu tun.

Die Zuweisung an den Container musst du in der onreadystatechange zugewiesenen Funktion vornehmen.
 
Sven...ich bete dich an :D
Ich habe das jetzt mal so gemacht, und es funktioniert :)
Javascript:
req.onreadystatechange = function(){
      if( req.readyState == 4 ){
         if(req.status == 200){
            if( id != '' ){
                document.getElementById('div-id-211').innerHTML = req.responseText;
                return 1;
            }
            return req.responseText;
         }
         else{
            alert("Fehler:"+req.status);
         }
      }
   };

edit: Hatte ich schonmal erwähnt, das dein Workaround echt super geil ist? Nochmals Danke dafür :)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück