Thomas Schenkeli: Datenkontrolle anhand eines GET-Requests

Hallo,

ich möchte auf einer Seite vor dem Speichern (nach dem Drücken des Speicher Buttons) die Eindeutigkeit einer ID überprüfen. Hierfür habe ich mir einen eigenen Request gebaut, der mir, befüllt mit den richtigen Parametern, ein XML zurückliefert in dem steht, ob die gewählte ID eindeutig ist oder nicht.

Jetzt ist mir nicht ganz klar, wie ich diesen GET-Requests absetzen soll um auf das zurück gelieferte XML zugreifen zu können ohne dass die aktuelle Seite beeinflusst wird.

Am liebsten wäre es mir anhand des Requests eine Art Popup zu öffnen, welches anschließend das XML beinhaltet und dieses Popup sagt dann dem opener ob die ID eindeutig ist oder nicht. Am Besten sollte man dann dieses Popup auch nicht sehen und der Code der Javascript-Funktion die das Popup öffnet soll erst weiter ausgeführt werden, wenn das Popup zurückliefert, ob die ID eindeutig ist oder nicht.

Hat da irgendjemand eine Idee? Oder hat schon mal sowas gemacht?

Besten Dank!

Thomas

  1. Hell-O!

    Jetzt ist mir nicht ganz klar, wie ich diesen GET-Requests absetzen soll um auf das zurück gelieferte XML zugreifen zu können ohne dass die aktuelle Seite beeinflusst wird.

    Das könnte man mittels AJAX lösen, was allerdings den Nachteil hätte, dass Javascript Voraussetzung ist. Die Anwendung kann im Hintergrund onsubmit laufen und den Formularversand bei ungültiger ID verhindern bzw. bei gültiger ID die Speicherung anstoßen. Einen - wie ich finde - recht guten Einstieg in das Thema findest du im Mozilla Developer Center.

    Siechfred

    --
    Hier könnte Ihre Werbung stehen.
    <br />
    <b>Warning</b>:  fopen(http://siechfred.kennt-wayne.de/rss-feed): failed to open stream: Connection refused in <b>/home/anaboe_net/www/remsig.php</b> on line <b>4</b><br />
    Siechfreds Tagebuch || Das Steuerblog  || RT 221 Erfurt-Altstadt i.V.
    1. Hell-O!

      Jetzt ist mir nicht ganz klar, wie ich diesen GET-Requests absetzen soll um auf das zurück gelieferte XML zugreifen zu können ohne dass die aktuelle Seite beeinflusst wird.

      Das könnte man mittels AJAX lösen, was allerdings den Nachteil hätte, dass Javascript Voraussetzung ist. Die Anwendung kann im Hintergrund onsubmit laufen und den Formularversand bei ungültiger ID verhindern bzw. bei gültiger ID die Speicherung anstoßen. Einen - wie ich finde - recht guten Einstieg in das Thema findest du im Mozilla Developer Center.

      Werde mir AJAX mal angucken (ist ja sowieso ein Zauberwort im Moment), aber falls ich da zuviel umstellen muss ist es wohl nicht die Lösung. Möchte nicht wegen einer einzelnen Aktion in einer Applikation mit über 100 Seiten eine neue Technologie reinbringen.

      Wüsste jemand wie das nur mit Javascript gehen könnte?

      Siechfred

    2. Hell-O!

      Jetzt ist mir nicht ganz klar, wie ich diesen GET-Requests absetzen soll um auf das zurück gelieferte XML zugreifen zu können ohne dass die aktuelle Seite beeinflusst wird.

      Das könnte man mittels AJAX lösen, was allerdings den Nachteil hätte, dass Javascript Voraussetzung ist. Die Anwendung kann im Hintergrund onsubmit laufen und den Formularversand bei ungültiger ID verhindern bzw. bei gültiger ID die Speicherung anstoßen. Einen - wie ich finde - recht guten Einstieg in das Thema findest du im Mozilla Developer Center.

      So, hab  mir das mal angesehen, klingt super, ziemlich genau das, was ich suche.

      Einziges Verständnisproblem:

      ich habe eine Funktion, die beim Klick auf den Speicher Button aufgerufen wird (save()), in dieser rufe ich eine weitere Funktion auf, die den HTTP_Request absetzt (checkID()). Dabei gebe ich eine weitere Funktion an, welche ausgeführt wird sobald die Response zurück kommt (processResponse()). Diese Funktion findet nun heraus, ob die ID eindeutig ist oder nicht. Aber wie gewährleiste ich, dass in der Funktion save() erst weitergearbeitet wird, sobald processResponse() abgearbeitet wurde? schließlich kann ich da ja nicht mit Return-Statements arbeiten.

      Besten Dank für eure Hilfe
      Thomas

      Siechfred

      1. hi,

        ich habe eine Funktion, die beim Klick auf den Speicher Button aufgerufen wird (save()), in dieser rufe ich eine weitere Funktion auf, die den HTTP_Request absetzt (checkID()). Dabei gebe ich eine weitere Funktion an, welche ausgeführt wird sobald die Response zurück kommt (processResponse()). Diese Funktion findet nun heraus, ob die ID eindeutig ist oder nicht. Aber wie gewährleiste ich, dass in der Funktion save() erst weitergearbeitet wird, sobald processResponse() abgearbeitet wurde?

        In dem du eben kein "richtiges" AJAX machst, in dem des erste A für asynchron steht, sondern einen synchronen Request startest - auf dessen Ergebnis dein Script dann wartet, und erst anschließend weiterläuft.

        Asynchron/synchron steuerst du über den dritten Parameter der open-Methode.
        Und wenn du synchron arbeitest, benutzt du keine Handlerfunktion mehr für die Reaktion auf's Ergebnis, sondern notierst den entsprechenden Code einfach nach dem Absenden des Requests.

        gruß,
        wahsaga

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

          Asynchron/synchron steuerst du über den dritten Parameter der open-Methode.
          Und wenn du synchron arbeitest, benutzt du keine Handlerfunktion mehr für die Reaktion auf's Ergebnis, sondern notierst den entsprechenden Code einfach nach dem Absenden des Requests.

          Danke, genau damit ging es, nun wird das Script erst fortgeführt, wenn die Response ankommt.

          Ein Problem stellt sich mir aber noch in den Weg: ich schaffe es nicht die Funktion zu definieren, die ausgeführt werden soll, sobald die Response da ist.

          Hier mein aktueller Source-Code:

          function checkUniqueDEE()
          {
            //empty the http-request object
            http_request = false;
            if (window.XMLHttpRequest) // Mozilla, Safari, ...
            {
              http_request = new XMLHttpRequest();
            }
            else if (window.ActiveXObject) // IE
            {
              http_request = new ActiveXObject("Microsoft.XMLHTTP");
            }

          http_request.onreadystatechange =  function()
            {
              if (http_request.readyState == 4)
              {
                if (http_request.status == 200)
                {
                  alert(http_request.responseText); //wird nicht ausgegeben
                }
                else
                {
                  alert('Bei dem Request ist ein Problem aufgetreten.');
                }
              }
            };

          //define URL
             var myUrl = '<xsl:value-of select="$webapp" /><xsl:value-of select="$servlet" /><xsl:value-of disable-output-escaping="yes" select="$request_checkUniqueDEE" />;

          //Specify which Request and which URL to use and if the Script should wait for the response to be available
            http_request.open('GET', myUrl, false);
            //This is a GET-Request, do not specify any POST-Parameters
            http_request.send(null);

          alert(http_request.responseText); //Wird ausgegeben

          return true;
          }

          Die onreadystatechange-Funktion wird einfach nicht ausgeführt, auch wenn ich eine weitere Javascript-Funktion definere die ausgeführt werden soll:

          http_request.onreadystatechange =  processAjaxResponse;

          Es tut sich einfach nicht?

          Jemand eine Idee warum?

          gruß,
          wahsaga

          lg
          Thomas

          1. hi,

            Ein Problem stellt sich mir aber noch in den Weg: ich schaffe es nicht die Funktion zu definieren, die ausgeführt werden soll, sobald die Response da ist.

            Du möchtest den letzten Satz meines vorherigen Postings noch mal lesen ;-)

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Ah, danke, jetzt wird's klarer ... was mich da nur verwirrt hat war, dass im Internet Explorer der onreadystatechange-Code ausgeführt wird und im Firefox nicht, sprich im IE hab ich zwei Popups bekommen, im Firefox nur eins.

              Besten Dank!

              lg
              Thomas