prototype Logik-Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • prototype Logik-Problem

    Mit folgendem Code ausschnitt verarbeite ich ein formular

    Code:
    function checkout(form, step)
        {
        if (step == 'step_1')
            {
            var errorsArray =
                [
                "Bitte Gib einen Titel an!",
                "Bitte Gib einen Oberbegriff an!",
                "Ein Artikel mit diesem Titel besteht bereits!"
                ];
    
            var elem1 = $("naw_title");
            var elem2 = $("naw_stitle");
    
            elem1.value = str_replace(errorsArray[0], '', elem1.value);
            elem1.value = str_replace(errorsArray[2], '', elem1.value);
            elem2.value = str_replace(errorsArray[1], '', elem2.value);
    
            if (elem1.value == '')
                {
                elem1.focus();
                elem1.addClassName('focus');
                elem1.value = errorsArray[0];
                return false;
                }
    
            else if (elem2.value == '')
                {
                elem2.focus();
                elem2.addClassName('focus');
                elem2.value = errorsArray[1];
                return false;
                }
    
            else if (elem1.value != '')
                {
    
                var myAjax = new Ajax.Request('../extensions/NewArticleWizard/Response.php',
                    {
                    method: 'post',
                    postBody: 'action=checkTitle&title=' + $("naw_title").value,
                    onSuccess: function(e)
                        {
                        if (e.responseText == 1)
                            {
                            elem1.focus();
                            elem1.addClassName('focus');
                            $('naw_title').value = 'Ein Artikel mit diesem Titel besteht bereits!';
                            }
                        }
                    });
                }
            return false;
            }
        }
    Code:
    <form method="post" action="" onsubmit="return checkout(this,'step_1');">
    Es geht hier bei um einen Wizard für ein Wikisystem. Es muss aufjedenfall ein Titel und ein oberbegriff angegeben werden. Allerdings soll es nur weiter gehen, wenn es den Artikel noch nicht gibt. Hierfür den request.

    Besten Dank für euer Brainstorming!
    derTrallala
    Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

  • #2
    [list=1][*]bist du im falschen Forum gelandet (siehe Brainstorming)[*]könntest du mal einen deutschen Satz mit einer vernünftigen Problembeschreibung formulieren.[*]solltest du unrelevanten Code löschen und kommentieren was du bereits geschrieben hast.[*]hast du doch, wenn ich den Code richtig verstehe, schon Code geschrieben der prüft ob der Artikel bereits existiert oder?[/list=1]
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      Also es geht um folgendes: Ich schreibe gereade eine Erweiterung für ein Mediawikisystem. Dabei handelt es sich um einen Wizard, der Benutzer über mehrere Masken zu einem ordentlich kategorisierten Artikel führt.

      In einem ersten Schritt müssen sie dazu einen Titel und einen Oberbegriff angeben. Ist dies erledigt, gehts via einem Klick auf die nächste Seite. Zu vor muss aber geprüft werden, ob der gewählte Artikelname nicht schon existiert. Dazu dieser request(ajax).

      Der Response wird hier gehandelt:
      PHP-Code:
      if ($wgRequest->getVal('action') == 'checkTitle')
          
      checkTitel();

      function 
      checkTitel()
          {
          global 
      $wgRequest;
          global 
      $wgTitle;

          
      $title=$wgRequest->getVal('title');

          
      $title=Title::newFromText($title);

          
      $article=new Article($title);

          if ((
      $title->mArticleID != '0') && $article->exists())
              echo 
      "1";
          else
              echo 
      "0";
          } 
      Das Problem: Es darf also nur weitergehen, wenn Titel und Oberbegriff eingegeben sind und der Titel auch valide ist. Was das Problem ist, das der ajax request anscheinend ein return false im Anschluss haben muss. Und dann geht es auf Grund des Eventhandlers des Formtags nicht weiter.

      So, hoffe das ist ausführlich genug
      Gute Nacht
      derTrallala
      Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

      Kommentar


      • #4
        kein Problem

        Kommentar


        • #5
          Um das nochmal zusammenzufassen: Du möchtest beim Abschicken eines Formulars den Inhalt des Formulars prüfen, kannst aber (auf Grund der asynchronen Anfrage) nicht direkt true oder false zurückgeben.
          kein Problem
          hö?
          Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

          Kommentar


          • #6
            Code:
            interface XMLHttpRequest {
              ...
              void open(in DOMString method, in DOMString url, in boolean async);
            }
            (Quelle)

            Und wenn du deinen Request synchron absendest??

            Kommentar


            • #7
              O.K. besten Dank,

              synchron, dann klappts

              Code:
                      else if (elem1.value != '')
              
                          {
              			var valid=true;
                          var myAjax = new Ajax.Request('../extensions/NewArticleWizard/Response.php',
                              {
                              method: 'post',
              				asynchronous: false,
                              postBody: 'action=checkTitle&title=' + $("naw_title").value,
                              onSuccess: function(e)
                                  {
                                  if (e.responseText == 1)
                                      {
                                      elem1.focus();
                                      elem1.addClassName('focus');
                                      $('naw_title').value = 'Ein Artikel mit diesem Titel besteht bereits!';
              						valid = false;
                                      }
                                  }
                              });
                          }
              		return valid;
                      }
              Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

              Kommentar

              Lädt...
              X