Ajax Python und Formular die 100ste

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Jens Burkhardt
User
Beiträge: 3
Registriert: Freitag 22. Februar 2008, 19:36

Ajax Python und Formular die 100ste

Beitragvon Jens Burkhardt » Freitag 22. Februar 2008, 19:59

Hallo zusammen,

Ich weiss, ich starte den 100sten thread mit dem Thema aber ich komme einfach nicht mehr weiter.
Folgendes Problem:
Ich will hab ein Formular, will die Daten per post an ein py Script schicken, die Daten werden verarbeitet, während dessen erscheint ein Ladebalken und dann wird das Ergebnis ausgegeben.
Folgender Code liegt zugrunde:

http://www.nooto.de/python/webscripte/f ... l-ajax.htm

Code: Alles auswählen

<html>
        <head>
                <title>Test</title>
                <meta http-equiv="Content-Type" content="text/html;
                charset=UTF-8">
                <script type="text/javascript" src="miniajax.js"></script>
        </head>
                <script type="text/javascript">

                        function senddata() {
                                indikator = '<img src="indicator.gif">';

                                ajax.submit('form.py', 'test', $('form'));
                                document.getElementById('result').innerHTML = indikator;
                        }
                </script>

<body bgcolor="#FFFFFF">
        <center>
        <div id="result">
        <form method="post" onSubmit="senddate()" id="form" accept-charset="UTF-8">
                <h2>WhyQS</h2>
                <input type="text" name="queryString">

                <br>
                <input type="submit" value="Anfrage senden" onClick="senddata(); return false">
        </form>
        </div>
        <div id='test' align="left">
        </div>
        </center>
</body>
</html>

Was ich geändert habe ist, dass ich ein weiteres div element eingebaut habe, welches die Rückgabe aufnimmt.

Das funktioniert auch alles ganz hübsch, aber jetzt kommen die Schwierigkeiten:
Wenn das Ergebnis zurückkommt soll die Seite so aussehen:
1. Der Ladebalken soll verschwinden
2. Anstelle des Ladebalkens wird das Formular gesetzt
3. Im div Element "test" erscheint die Ausgabe

Im Moment wird in "test" das Ergebnis angezeigt aber der Ladebalken verschwindet nicht.
Mein Problem ist, dass ich die miniajax.js nicht so ríchtig kapiere, an welcher Stelle ich da rumpfuschen muss um das gewünschte zu erreichen.
Komm ich über readyState==4 weiter?
Falls ihr noch mehr Code braucht oder so, nicht schimpfen, ich liefere ihn nach! Wollte nur nicht am Anfang gleich alles vollschreiben.
Hoffe einer kann Licht in das Dunkel bringen :-)
Danke schonmal für Eure Mühe

Grüße
Jens


EDIT by Gerold: Code in Code-Tags gesetzt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 22. Februar 2008, 20:19

Hallo Jens!

Willkommen im Python-Forum!

Originalbeispiel:

Code: Alles auswählen

ajax.submit('formmail-ajax.py', 'result', $('feedbackform'));

Bei dir:

Code: Alles auswählen

ajax.submit('form.py', 'test', $('form'));


Im Originalbeispiel wird der gesamte Bereich mit der ID "result" überschrieben. Das ist der Bereich in dem auch das Gif seine Runden dreht.

In deinem Code überschreibst du beim Empfang einen anderen Bereich. Nämlich den Bereich "test". So wird das vorher eingefügte Gif nicht überschrieben.

Genügt dir das?

mfg
Gerold
:-)

PS: Du hast im Form-Tag ``onSubmit="senddate()"`` drinnen stehen. Das braucht es nicht. Außerdem hast du dich sowiso verschrieben. ;-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Jens Burkhardt
User
Beiträge: 3
Registriert: Freitag 22. Februar 2008, 19:36

Beitragvon Jens Burkhardt » Freitag 22. Februar 2008, 20:23

Wow ich bin begeistert. Wahnsinnig schnelle Antwort :-)

Hmm, das mit den beiden Containern hab ich absichtlich gemacht. Folgendes soll passieren,
wenn die Antwort da ist, soll das erste div Element mit dem Formular gefüllt werden und das zweite mit der Antwort.
Im Moment kommt die Antwort ins 2te Element und der Ladebalken dreht lustig seine Runden.
Ich gehe mal davon aus, dass das in der miniajax.js irgendwo gespeichert werden muss aber ich verstehe die Datei einfach nicht und bin deshalb etwas planlos, wo ich ansetzen muss.
Ich habe mal einen Thread gesehen, in dem du die miniajax.js auch verwendet hast. Gibt es irgendwo eine Erklärung was genau die Funktionen tun? Ich bin einfach nicht gut darin, Code der nur aus einer Zeile besteht, zu verstehen.

Das Problem mit dem senddata() --> ist irgendwie bei copy&paste kaputt gegangen. Wenn ich es bei mir im Originalcode rausnehme klappt die ganze Seite nicht. Keine Ahnung warum.

Grüße
Jens
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 22. Februar 2008, 20:50

Hallo Jens!

Jens Burkhardt hat geschrieben:Hmm, das mit den beiden Containern hab ich absichtlich gemacht.

Das ist aber vielleicht gar nicht mal so gut. Du könntest dir vom Python-Programm ein fertig ausgefülltes Formular zurück liefern lassen. Dann ersetzt du den Inhalt von "result" einfach wieder mit neuem HTML-Code -- einem neuen Formular.

Jens Burkhardt hat geschrieben:Folgendes soll passieren,
wenn die Antwort da ist, soll das erste div Element mit dem Formular gefüllt werden und das zweite mit der Antwort.

Dieses MiniAjax ist nur bedingt für größere Aufgaben verwendbar. in ``ajax.submit`` wird nur angegeben, welche URL aufgerufen werden soll und in welches Element (welche ID) die Rückgabe geschrieben werden soll. Dabei wird der komplette Inhalt des Tags ersetzt. Als dritter Parameter wird angegeben, von welchem Formular die Daten ermittelt und mitgeschickt werden soll.

Ich kann das jetzt nur skizzieren. Aber du kannst dir deine eigene Antwort-Funktion schreiben.

Das könnte so aussehen:

Code: Alles auswählen

<script type="text/javascript">

    function submit(url, frm) {
        var f = function(r){
            $('ziel_1').innerHTML = r;
            $('ziel_2').innerHTML = 'In ziel_1 steht jetzt das Resultat und hier dieser Text';
        }
        ajax.post(url,f,ajax.serialize(frm));
    }
   
    function senddata() {
        indikator = '<img src="indicator.gif">';

        submit('form.py', $('form'));
        $('ziel_1').innerHTML = indikator;
    }

</script>

Aber wie ich schon schrieb -- das ist nur skizziert. Aber vielleicht hilft es dir ja schon weiter.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Jens Burkhardt
User
Beiträge: 3
Registriert: Freitag 22. Februar 2008, 19:36

Beitragvon Jens Burkhardt » Samstag 23. Februar 2008, 18:52

Ohh man. Wie war das mit dem Wald und den Bäumen ;-) . Also, lass jetzt von meinem Python Skript das Formular erstellen. Wie ist das jetzt aber mit der javascript funktion.


Code: Alles auswählen

print '<center>'
print '<p>'
print '<h2>WhyQS</h2>'
print '<FORM method="post">'
print '<INPUT type="text">'
print '<br>'
print '<INPUT type="submit" name="test" value="Anfrage senden" onClick="senddata()">'
print '</center>'
print '</FORM>'


Muss ich die ganzen javascript-geschichten auch in das python script einbinden?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Samstag 23. Februar 2008, 20:35

Jens Burkhardt hat geschrieben:Also, lass jetzt von meinem Python Skript das Formular erstellen. Wie ist das jetzt aber mit der javascript funktion.

Hallo Jens!

Sorry! Ich hatte fälschlicherweise angenommen, du willst Emails versenden und wenn nicht alle Daten korrekt angegeben wurde, wieder das Formular mit den bereits eingegebenen Daten anzeigen.

Aber anscheinend willst du eine SQL-Abfrage durchführen und das Ergebnis anzeigen. Zumindest schließe ich das aus dem namen "queryString". Du solltest dir im Klaren sein, dass man so auch Abfragen wie z.B. "DELETE FROM wichtige_adressen" ausführen könnte.

Wie auch immer. Jetzt habe ich keine Zeit mehr um mich dem Problem annehmen zu könne. Vielleicht später oder je nach Bierkonsum... Morgen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]