Ich habe Apache2 installiert und Python funktioniert.
Ich habe jedoch ein Problem. Ich habe zwei Seiten.
One eine Python-Seite und die andere eine HTML-Seite mit JQuery
Kann mir bitte jemand sagen, wie ich meine Ajax-Post richtig funktionieren lassen kann.
%Vor%Und der Python-Code
%Vor%OK, gehen wir zu Ihrer aktualisierten Frage.
Zuerst sollten Sie die Ajax-Dateneigenschaft in der Zeichenfolgendarstellung übergeben. Dann, da Sie die Eigenschaften dataType
und contentType
mischen, ändern Sie dataType
value in "json"
:
Ändern Sie abschließend Ihren Code ein wenig, um mit der JSON-Anfrage wie folgt zu arbeiten:
%Vor% Als Ergebnis erhalten Sie im success
-Handler der Ajax-Anfrage ein Objekt mit den Eigenschaften success
und message
.
Sie sollten JSON-Daten wie folgt lesen:
%Vor%Mit dem folgenden Code können Probleme auftreten:
%Vor%oder weniger prägnant geschrieben:
%Vor% Das funktioniert für mich, wenn mein cgi-Skript auf einem apache
-Server ist, aber Sie können nicht darauf zählen, dass es im Allgemeinen funktioniert - wie ich herausfand, als mein CGI-Skript eingeschaltet war ein anderer Server. Gemäß der CGI-Spezifikation:
Die Schlüsselzeile lautet:
Das Skript darf NICHT versuchen, mehr zu lesen als CONTENT_LENGTH Bytes, auch wenn mehr Daten verfügbar sind.
Offensichtlich sendet apache
sofort nach dem Senden des Anfragetexts an das CGI-Skript ein eof-Signal an das CGI-Skript, wodurch sys.stdin.read()
zurückkehrt. Aber nach der CGI-Spezifikation, ein Server ist nicht erforderlich, ein eof-Signal nach dem Körper der Anfrage zu senden, und ich fand, dass mein CGI-Skript auf sys.stdin.read()
hängen - wenn mein Skript auf einem anderen Server war, was schließlich verursacht ein Zeitüberschreitungsfehler.
Um json-Daten im allgemeinen Fall einzulesen, sollten Sie folgendes tun:
%Vor%Der Server setzt eine Reihe von Umgebungsvariablen für CGI-Skripte, die Header-Informationen enthalten, von denen eine CONTENT_LENGTH ist.
Hier sehen Sie, wie eine fehlgeschlagene Curl-Anfrage ausgesehen hat, als ich myjson = json.load(sys.stdin)
verwendet habe: