Problem mit Ajax request

Django, Flask, Bottle, WSGI, CGI…
Antworten
PM84
User
Beiträge: 1
Registriert: Freitag 13. Juni 2014, 15:23

Hallo alle zusammen,

normalerweise arbeite ich micht PHP und JS, doch für mein derzeitiges Projekt muss ich ein Python script, das einwandfrei funktioniert aus JS heraus ansprechen.

Ich habe dabei in einem html-File nachfolgenden Code:

Code: Alles auswählen

 <script>
    function ButClick(){
        $.ajax({
	        url: "../cgi-bin/test.py",
	        type: "POST",
	        data: {var1: 'Value 1', var2: 'Value 2'},
	        success: function(response){$("#TestDiv").html(response);}
        })
    }
    </script>

    <form><input type='button' onclick="ButClick()" value="Click Me!" /></form>
    <div id='TestDiv'></div>
Außerdem habe ich ein Python 3.4 Skript mit dem Namen test.py:

Code: Alles auswählen

    #![...]/custom/bin/python
    # -*- coding: iso-8859-15 -*-
    import cgi
    import cgitb
    cgitb.enable()
    data=cgi.FieldStorage()
    print("Var1-Data lautet: " + data['var1'].value)
Ich möchte jetzt lediglich Daten nach dem Klick auf den Button an Python übermitteln, dort ausgeben und dann wieder zurück übermitteln. Leider tritt dabei nachfolgender Fehler auf:

Code: Alles auswählen

    Traceback (most recent call last):
    File "test.py", line 12, in <module>
    print("Var1-Data lautet: " + data['var1'].value)
    File "[...]/custom/lib/python3.4/cgi.py", line 598, in __getitem__ raise KeyError(key)
    KeyError: 'var1'

Könnte mir hier bitte jemand behilflich sein? Ich bin kurz vorm Verzweifeln.

Viele Grüße und schon mal DANKE!
Peter
BlackJack

@PM84: Mit CGI würde ich mich ja nicht herumschlagen wenn ich nicht müsste. Ich würde mindestens eines der Mikrorahmenwerke verwenden wie Bottle oder Flask. Notfalls kann man die auch per CGI über einen Webserver anbinden, wenn es denn gar nicht anders geht.

Ich würde an Deiner Stelle erst einmal ein minimales Beispiel zum laufen bringen was nur statisch etwas zurück gibt, denn selbst das wäre bei Dir nicht in der richtigen Form weil ein CGI-Skript nicht nur den Inhalt sondern vorher auch den HTTP-Header selber erstellen und ausgeben muss. Näheres dazu steht in der Dokumentation vom CGI-Modul.

Wenn das klappt, kannst Du ja mal die Schlüssel zurück liefern die das `FieldStorage`-Objekt kennt. Und wenn da nichts drin ist, müsstest Du mal schauen wo das verloren geht. Also zum Beispiel beim Browser angefangen über die entsprechenden Werkzeuge schauen was da tatsächlich an den Server gesendet wird.
Antworten