LSpreee: verhindern von doppeltem Aufruf des Requests

Hallo,

ich rufe mittels eines Buttons eine JS-Funktion [makeRequest("ini_program")] auf, welche einen Ajax-Request zu einem php-Script (route.php) startet. In makeRequest() steht auch ein Befehl zum disablen des Buttons, damit der Prozess nicht doppelt angestoßen werden kann:

//document.getElementById('processbutton').disabled = true;

Nun habe ich das mal auskommentiert und möchte die doppelte Ausführung auch serverseitig unterbinden. Also im route.php.

Einfach: man könnte innerhalb von route.php eine Variable setzen, dass es gerade läuft, zB eine Session-Variable, die ich global überprüfen kann, die man am Ende wieder löscht.

Das Problem ist, route.php wird schon von der einen Funktion mehrmals angestoßen. In der Callbackfunktion stehen weitere Aufrufe der Funktion makeRequest(), die den Request ausführt. Immer auf das selbe route.php, aber mit unterschiedlichen URL-Parametern. Grund: das route.php ruft eine exe. Diese soll 600 Läufe produzieren, stürzt aber öfter mal ab.

Im route.php steht dann ein switch, wie:

switch ($task){  
		  
  //// initialize program ////////////////////////////  
  
  case "ini_program":  
  # ordner anlegen, etc.  
  break;  
  
  
  //// run program ///////////////////////////////////  
		  
  case "run_program":	  
  # ausführen der .exe  
  # diese soll 600 runs produzieren und schreibt dabei ein ascii logfile.  
  break;  
  
  
  //// end program ///////////////////////////////////  
  
  case "end_program":  
  # check im ascii logfile, ob 600 runs ausgeführt wurden.  
  if($alles_ok) {  
    # unter anderem delete ascii logfile für nächste ausführung.  
  }  
  else echo "runs_not_achieved";  
  break;  
  
}  

In der Callbackfunktion wird dann beim Task "end_program" wiederum auf den Rückgabewert "runs_not_achieved" überprüft, und im Fall dessen wiederum makeRequest("run_program") aufgerufen.

Frage erstmal: geht das einfacher? Besser? Ich finde es eigentlich suboptimal über die Ausgabe (echo) den Programmverlauf zu steuern. Kann ich Rückgabewert und Ausgabe getrennt bekommen?

Und dann: wie kann ich das mehrmalige Ausführen unterbinden.

Mein jetztiger Ansatz war, dass ich im route.php im Falle von $task=="ini_program" eine SESSION variable setze, die bei "end_program" gelöscht wird. Eine neue Instantiierung mittels makeRequest("ini_program") prüft auf die SESSION-Variable und bricht in diesem Falle ab, mit die("exit"). Die Callbackfunktion wiederum prüft bei task=="ini_program" auf den Rückgabewert "exit" und wird in diesem Fall abgebrochen (return(0)).
Problem: dann wird die erste Routine auch abgebrochen. Den Grund kann ich nicht ganz nachvollziehen. Es sieht so aus, als ob das return(0) jede Instanz von der Callbackfunktion stört?!?

Hilfe und danke.

LG,
LSpreee

  1. Hallo,

    ich hoffe, ich habe nicht die Posting-Regeln verletzt. Ich benötige in dieser Sache Hilfe.

    LG,
    LSpreee