Nobody©: location.reload()-Problem in Switch()

Nachdem ich nun mehrere (kompetente) Chats, das Chip.de-Forum und einige Informatiklehrer um Hilfe in einem wahrscheinlich simpleren Problem gebeten und auch Google erforlglos durchforstet habe, wende ich mich nun hoffnungsvoll an dieses Forum. Folgendes ist mein stilisierter Problem-Code:

switch(Check) {
  case "Eingabe1":
  break;
  case "Eingabe2":
  break;
  default:
    window.alert("Ausgabe A");
    location.reload(true);
  break;
}

window.alert("Augabe B");

Eigentlich wollte ich lediglich die String-Variable "Check" (die sich aus dem Eingabewert einer Prompt()-Aufforderung ergibt) auf ihren Inhalt prüfen. Solange Check den ersten oder zweiten Fall erfüllt, sollte das Programm "normal" mit der 'Ausgabe B' fortfahren. In allen anderen Fällen, sollte die 'Ausgab A' ausgegeben und anschließen die Seite neu geladen werden (und damit das Programm neu starten). Aus mir unerklärlichen Gründen wird im Falle des default-Weges jedoch erst die 'Ausgabe A' ausgegeben und erst NACH der 'Ausgabe B' die Seite neu geladen.
Für den Fall das es einen Unterschied macht: Die Fälle case1 und case2 sollen in der fertigen Version noch mit alert()-Befehlen staffiert werden. Und die 'Ausgabe B' bildet derzeitig meinen Programmschluss.
Herzlichen Dank für jegliches Engagement im Vorraus.

  1. Hallo Nobody©,

    switch(Check) {
      case "Eingabe1":
      break;
      case "Eingabe2":
      break;
      default:
        window.alert("Ausgabe A");
        location.reload(true);
      break;
    }

    window.alert("Augabe B");

    Vielleicht ist es ein kleiner Denkfehler:
    location.reload(true) gibt einen Befehl an den Browser, die neue Seite zu laden.
    Da dies meist länger dauert als das Skript ausgeführt wird, kann es sein dass folgendes Verhalten eintritt:

    1. Signal zum Reload wird mit location.reload(true) an den Browser gesendet
    2. Das Skript wird weiter verarbeitet, bis die Seite entladen wird - also wird Ausgabe B ausgeführt
    3. Der Reload wird durchgeführt (Signal zum Reload wurde in 1. gesendet)

    Mach also am Besten eine if-Abfrage, ob Ausgabe B geschrieben werden soll oder nicht.
    Mein vermuteter Denkfehler:
    location.reload(true) führt nicht zum sofortigen Abbruch des Skripts.

    Bis dann!

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    SELFCode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html
  2. Hi,

    Marcs vollkommen richtige Anmerkungen ergänzend:

    Packe das Programmende in eine Funktion und rufe diese Funktion jeweils in den "cases" auf. Der default läuft dann ins nichts und alles ist in Ordnung ...

    Alternativ (und IMHO eigentlich zu bevorzugen - switch/case existiert erst ab JS 1.2):

    if(Check=="Eingabe1" || Check=="Eingabe2") {
     gofurther();
    } else {
     window.alert("Ausgabe A");
     location.reload(true);
    }

    function gofurther() {
     window.alert("Ausgabe B");
    }

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Hi ihr,

      ich wollte mich nochmal herzlichst für die Hilfe bedanken. Es hat alles super geklappt.
      Ich war auch schon auf die Idee mit einer if-Umgehung gekommen, doch als Turbo Pascal-er muss ich mich noch dran gewöhnen, das man functions auch aufrufen kann und sie dann erst definiert. Allerdings hat das bei mir dann aus anderen Gründen auch nicht geklappt.
      Habt also vielen Dank, wenn ich mich irgendwie erkenntlich zeigen kann, braucht ihr mir nur bescheid zu geben (ICQ #119893691;MSN,AIM oder YIM auch möglich).