2016-11-13 3 views
0

Eine Idee ist, senden Sie JS Array, die HTML-Element-IDs zu Python-Skript mit AJAX enthält. Ich habe mehrere Beispiele auf Stackoverflow durchgegangen, aber keiner von ihnen hat bisher funktioniert.JS-Array wird nicht an Python-Skript mit AJAX gesendet

Meine JS Funktion ist:

function callpc1() { 
    var pcimages = document.querySelectorAll('.pcpics'); 
    test = []; 
    test[0] = pcimages[0].id; 
    test[1] = pcimages[1].id; 
    test[2] = pcimages[2].id; 
    $.ajax({ 
     type: "POST", 
     url: "/~.../pcmove1.py", 
     data: { 
      test:test 
     }, 
    }); 
} 

Problem ist Python-Skript keine Array-Daten bekommt und Variable bleibt leer auf Python Seite Auf Python Seite I getvalue Methode verwenden. Ich nehme an, ein Fehler ist mit data: Definition. Und ich würde vermeiden zu verwenden JSON Bitte geben Sie einen Hinweis darauf, was hier falsch definiert ist?

bearbeiten


-Code auf Python Seite

import cgi 
page = cgi.FieldStorage() 
listed = page.getvalue('test', "unsuccess") 
results = open("test.txt", "aw") 
results.write (listed) 
results.close() 
+1

Was ist der Code auf der Seite Python? – Ouroborus

+0

@Ouroborus Ich habe meine Frage bearbeitet, fügte auch Python-Code –

Antwort

1

Python cgi Modul verarbeitet Verarbeitung, die nicht für gesendete JSON-Daten geeignet ist. Insbesondere wird der Inhalt einer POST-Anfrage an ein CGI-Modul unter stdin gesendet und cgi.FieldStorage() liest das ein und versucht, es in etwas Brauchbares umzuwandeln, geht aber von einer normalen Formularübergabe aus. Andere Daten werden als Umgebungsvariablen bereitgestellt.

Ihr Beispiel einstellen, können Sie in der Lage sein, Ihre Post-Daten als Python-Objekt wie folgt zu erhalten:

import sys, os 
import json 

length = os.environ["CONTENT_LENGTH"] 
raw = sys.stdin.read(length) 
data = json.loads(raw) 
# Now we have a Python object representing the JSON data 

# Convert the Python object back into a JSON formatted string 
# and save to file 
results = open("test.txt", "aw") 
results.write(json.dumps(data)) 
results.close() 
-1

Im AJAX Post-Methode, sollten Sie Test als JSON senden, versuchen Sie dies vor der Post-Methode machen:

obj = JSON.stringify(test); 

Und dann ändern Sie Ihre Datenparameter mit:

"data": obj 

Es sollte funktionieren.

+0

OP ist mit jQuery. jQuery behandelt das automatisch. – Ouroborus

+1

Wenn Sie nach json serialisieren, müssen Sie den Standard 'contentType' ändern und auch json im Anfragetext auf dem Server erwarten. Diese Antwort ist unvollständig und irreführend – charlietfl

Verwandte Themen