Announcement

Collapse
No announcement yet.

JQuery: submit Ereignis

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JQuery: submit Ereignis

    Hallo zusammen,

    ich habe für mein "Projekt" JQuery entdeckt. Habe dabei noch enorme Startschwierigkeiten.

    Zuerst die Situation:

    Code:
    <script language="javascript" src="../Config/js_scripte/jquery-1.7.2.min"></script>
    <script type="text/javascript">
    $(document).ready(function(){
    // schliessen des Fensters überwachen!!		  $(window).unload( function () { $("#schliessen").submit();} );
    	</script>
    HTML Code:
    <form id = "schliessen" method="post" name ="schliessen">
    <input id= "schliessen" name="zu" type="hidden" value="schliessen">
    <button id="buchen_button" style="background-color:yellow;" onclick="submit();"><span style="color: red;">Zurück zur Übersicht</span>
    </button></form>
    So.

    Jetzt möchte ich die Seite überwachen, d.h. wenn der Button in dem Form angeklickt wird soll die Seite schliessen und die ID des zu bearbeitenden Datensatzes wird wieder in der Datenbank freigegeben.
    Das funktioniert auch!!

    Jetzt gibt es aber noch andere schöne Formulare in diesem Fenster. Bei einem Submit kommt es ja zum event unload. Jetzt soll die Überwachung feststellen ob ein submit vorliegt, wenn ja soll nichts passieren.

    liegt jedoch ein unload vor weil die Seite über das rote Fenster X geschlossen wurde so soll das og. Form ausgelöst werden und die Datenbank freigegeben werden.

    Oder gibt es eine Möglichkeit das rote X ( weiß garnicht wie es richtig heißt) auszuschalten.

  • #2
    Oder gibt es eine Möglichkeit das rote X ( weiß garnicht wie es richtig heißt) auszuschalten.
    Üblicherweise ist das der Button, mit dem Fenster geschlossen werden. Gott sei Dank gibt es keine Möglichkeit das zu verhindern, wäre ja katastrophal, wenn irgendeine Site mir verbietet den Browser zu schließen

    Du kannst das Ereignis submit http://api.jquery.com/submit/ nutzen um eben dann Dinge durchzuführen, die bei einem submit passieren sollen.
    Christian

    Comment


    • #3
      Hallo,

      eine sicher funktionierende Überwachung zur Freigabe von Datenbankobjekten halte ich auf dieser Basis für wenig sinnvoll. Die Probleme hast du ja schon bemerkt. Das unload-Event tritt auch bei einem "normalen nachladen" der Seite auf. Tritt es aber auch auf, wenn der Browser einfach geschlossen wird? Funktioniert das wirklich zuverlässig mit jedem Browser?
      Üblicherweise geht man in einer browserbasierten Umgebung den umgekehrten Weg. Die reservierten Objekte werden nach einer bestimmten Zeit vom Server selbsständig wieder freigegeben. Damit wird auch der Fall abgedeckt, wenn der Browser des Anwenders abschmiert. Um den aktuellen Nutzer nicht unter Zeitdruck beim Bearbeiten zu setzen, kann ein kleines JS per Ajax im Hintergrund ein Live-Ping senden. Solange dieser "Live-Ping" periodisch beim Server eintrifft, bleibt das Objekt reserviert. Fällt es über eine bestimmte Zeit aus, kann man davon ausgehen das die Bearbeitung - wie auch immer - abgebrochen wurde und das Objekt wird wieder freigegeben.

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Originally posted by Falk Prüfer View Post
        Hallo,
        Üblicherweise geht man in einer browserbasierten Umgebung den umgekehrten Weg. Die reservierten Objekte werden nach einer bestimmten Zeit vom Server selbsständig wieder freigegeben. Damit wird auch der Fall abgedeckt, wenn der Browser des Anwenders abschmiert. Um den aktuellen Nutzer nicht unter Zeitdruck beim Bearbeiten zu setzen, kann ein kleines JS per Ajax im Hintergrund ein Live-Ping senden.
        Wie realisiere ich denn sowas?

        mein Problem liegt einfach darin, dass ich eine "Datensatzabsicherung" einbaue. Es ist jetzt in der Vergangenheit (2x) vorgekommen, dass zwei User den gleichen Datensatz aufgerufen haben und ihn jeweils bearbeitet und gespeichert haben. das möchte ich unterbinden.

        Bei dem Datensatz handelt es sich um einen Ort der durch eine ID (primary) gekenzeichnet ist.

        wird dieser Raum jetzt durch einen User aufgerufen wird die RaumID und die ID des zugreifenden Rechners in eine db tabelle abgelegt.
        ruft ein anderer rechner ( übriges alles im Intranet) jetzt diesen raum auf bekommt er die Meldung " wird bearbeitet durch....."

        Damit das Fenster und somit die Nutzung des Raumes nicht ewig blockiert bleibt läuft, bei Inaktivität eine Uhr rückwärts und bei einem Mouseklick oder Tastendruck wird die Uhr resetet.

        Soo, die Seite soll über einen speziellen Button ( s.o.) geschlossen werden, da die Sperrdaten dann aus der DB gelöscht werden und der Raum wieder freigegeben wird.

        Leider sind viele meiner Kollegen von diesen roten X sehr angetan und schliessen die Seite darüber. Da ich mich mit Fug und Recht als blutigen Anfänger und absoluten Laien bezeichne , fällt mir dazu kein Lösungsansatz ein!

        Ich brauche vielleicht nur einen Kick in die richtige Richtung. Tüffteln möchte ich schon selbst. Auch wenn ich oft verzweifle....

        Comment


        • #5
          Wie Falk geschrieben hat -> ein AJAX Request auf den Server in einem regelmäßigem Abstand. Auch hier hilft JQuery mit jquery.post
          Zuletzt editiert von Christian Marquardt; 21.05.2012, 13:16.
          Christian

          Comment


          • #6
            Originally posted by A.DA View Post
            ...mein Problem liegt einfach darin, dass ich eine "Datensatzabsicherung" einbaue. Es ist jetzt in der Vergangenheit (2x) vorgekommen, dass zwei User den gleichen Datensatz aufgerufen haben und ihn jeweils bearbeitet und gespeichert haben. das möchte ich unterbinden.
            Das lässt sich ggfs. auch mit einer einfachen Timestamp- bzw. Fingerprint- Abfrage realisieren. Im einfachsten Fall erhält jeder Datensatz bei der Speicherung einen Timestamp verpasst. Ruft ein Client die Daten zum Bearbeiten ab, erhält er gleichzeitig auch den aktuellen Timestamp. Die Routine zum Speichern vergleicht jetzt den vom Client mitgesendeten (alten) Timestamp mit dem in der DB. Ist der Timestamp unterschiedlich, wurden die Daten zwischenzeitlich durch eine andere Session geändert und die Daten werden nicht gespeichert. Der Nutzer kann dann mit einer Meldung darüber informiert werden.
            Ist der Timestamp jedoch gleich, sind die Daten unverändert und können zusammen mit einem neuen Timestamp gespeichert werden.
            Der einfache Timstamp kann dabei aber auch durch einen Hash aller änderungsrelevanten Daten ersetzt werden.
            Je nach Umfang der Änderungen und Häufigkeit des Auftretens erzeugst du dabei jedoch Frust beim Nutzer, wenn er seine "stundenlange Tipperei" nicht speichern kann. Du solltest dann auf alle Fälle die Möglichkeit vorsehen, den Nutzer entscheiden zu lassen, ob er seine Änderungen verwerfen oder über die bereits zwischenzeitlich gemachte Änderung "drüberbügeln" möchte.

            Anmerkung: Zuverlässige Mechanismen für ein pessimistisches Sperrverfahren sind in einer "Stateless"- Umgebung schwer realisierbar. Hierbei ist u.U. viel Aufwand notwendig, um einsicheres Lösen der Sperren zu gewährleisten. Optimistische Sperrverfahren - wie o. beschrieben - sind da einfacher zu implemtieren, besitzen aber eben Nachteile.

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Ich brauche nochmal etwas zuspruch...

              ich versuche das Problem immer noch zu lösen. Habe dazu jquery UI entdeckt.

              ich habe eine Tabellenausgabe, in den Zeilen stehen u.a. Button um verschiedene Optionen durchzuführen.

              Bei Buttonclick folgendes:
              Code:
              $("input#verwalten_notgemeinschaft").click(function(){ 
                  var raumID = $(this).val();
              		
              			    var dataString = 'not_raumid=' + raumID ; // String an Datenbank
              				
              		 $.ajax(
              		{
              			type: "POST",
              			url:"testseite.php",
              			data: dataString,
              			cache: false,
              			success: function(html)
              			{
              			   $( "#dialog-form" ).dialog( "open" ); 				
              								alert(dataString);
              			},
              			error: function(result)
              			{
              			    alert("Es ist ein Fehler aufgetreten!");
              			}
              		    });
              			
              });
              der alert im ajax success meldet sich, ich gehe davon aus, dass der ajax request durchgeführt wurde.

              PHP Code:
              if($_POST['not_raumid'])
              {
                    
              $id=trim($_POST['not_raumid']);
                   
               
              $raum $button_control->get_pruefen_notgemeinschaft($id); 

              mein problem.... die $raum bleibt leer...

              das $button_control->get_pruefen_notgemeinschaft($id); mit fiktivem id Eintrag liefert ein Ergebnis.

              was mache ich falsch? bzw. habe ich etwas vergessen?

              Comment


              • #8
                nochwas...

                die Ausgabe erfolgt in:
                Code:
                $(function() {
                		$( "#dialog:ui-dialog" ).dialog( "destroy" );
                	
                		$( "#dialog-form" ).dialog({
                			//position: "top" ,
                			autoOpen: false,
                			height: 300,
                			width: 350,
                			modal: true,
                			buttons: {
                				
                			zurück: function() {
                					$( this ).dialog( "close" );
                				}
                			},
                			close: function() {
                				allFields.val( "" ).removeClass( "ui-state-error" );
                			}
                		});
                
                });
                PHP Code:
                <?php
                <div id="dialog-form" title="Notgemeinschaften bearbeiten">
                    <
                table class="edit_tab" id="edit_tab" >

                        <
                input type="hidden" value="<?php echo $submitId ?>" id="raumID" />
                        <
                tr class="edit_tr odd">
                         <
                td>norm.Belegung</td>
                         <
                td colspan="3"
                             <
                span id="label_belegung" class="text">
                                 <?
                php echo $raum[0]['belegung']; ?>
                            </span>
                          </td>
                         </tr> 
                        <tr class="edit_tr odd" id="maxbeleg">
                        <td>max.Belegung:</td>
                        <td colspan="3" >
                            <span id="label_maxbeleg" class="text">
                            <?php echo $raum[0]['maxbeleg']; ?>
                            </span>
                        </td>
                        </tr>
                       <tr class="edit_tr odd">
                         <td>akt.Belegung</td>
                         <td colspan="3">
                             <span id="label_vergeben" class="text">
                                 <?php echo $raum[0]['vergeben']; ?>
                             </span>
                        </td>
                       </tr>
                       <tr class="edit_tr odd">
                         <td >akt.Betten</td>
                         <td colspan="3">
                             <span id="label_haftplatz" class="text">
                                 <?php echo $raum[0]['haftplatz']; ?>
                             </span><img src="../gfx/warnung.jpg" class="pen" id="pen_haftplatz" />
                         </td>
                       </tr>
                        <!-- Zeile für den Nachnamen -->
                        <tr class="edit_tr" id="notgem">
                        <td>Notgemeinschaft:</td>
                        <td >
                            <span id="label_notgem" class="text">
                            <?php echo $raum[0]['notgem']; ?>
                            </span>
                            <input type="hidden" value="<?php echo $raum[0]['notgem']; ?>"
                                id="input_notgem" /><!--class="editbox"-->
                        </td>
                        <td >
                            <img src="../gfx/plus.jpg" class="pen" id="notgem_plus" style="cursor:pointer;" title="hinzufügen" />
                        </td>
                        <td >
                            <img src="../gfx/minus.jpg" class="pen" id="notgem_minus" style="cursor:pointer;" title="auflösen" />
                        </td>
                        </tr>

                    </table>
                </div>
                ?>

                Comment


                • #9
                  Was ist das? Eine Frage? Dein Code für alle?
                  Was sagt einem dieser Beitrag?

                  mein problem.... die $raum bleibt leer...
                  Debugge das Programm, lass dir die Werte ausgeben, nutze Firebug um die Client-Server Kommuikation zu prüfen

                  Ich sehe nicht, dass irgendwo $raum ausgegeben wird
                  Zuletzt editiert von Christian Marquardt; 06.06.2012, 17:57.
                  Christian

                  Comment


                  • #10
                    $raum wir mit array gefüllt und Ausgabe im zweiten Beitrag

                    Comment


                    • #11
                      Schön, wichtige Info, aber was sollen wir hier tun?
                      Ich kann jedenfalls nicht beurteilen, ob

                      $raum = $button_control->get_pruefen_notgemeinschaft($id);

                      korrekt arbeitet. Wie auch? Das kannst nur du, in dem du die von mir genannten Wege versuchst zu gehen. Als erstes wäre wohl zu prüfen, ob die $id korrekt übermittelt wurde. Was dann in der Klasse damit passiert und wie der raum gefüllt wird -> ??? Hellsehen?
                      Christian

                      Comment

                      Working...
                      X