一个想法是使用JS
将包含HTML元素ID的AJAX
数组发送到python脚本。我在Stackoverflow上也经历过多个例子,但到目前为止它们都没有。
我的JS
功能是:
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
},
});
}
问题是python脚本没有数组数据,变量在python端保持为空
在python方面,我使用getvalue
方法。我假设错误是data:
定义。我会避免使用JSON
请说明这里错误定义的内容?
修改
python端代码
import cgi
page = cgi.FieldStorage()
listed = page.getvalue('test', "unsuccess")
results = open("test.txt", "aw")
results.write (listed)
results.close()
答案 0 :(得分:1)
Python的cgi
模块执行的处理不适合提交的JSON数据。具体来说,POST请求的内容提供给stdin
上的CGI模块,cgi.FieldStorage()
读取并尝试将其转换为有用的内容,但假定提交正常的表单。其他数据作为环境变量提供。
调整您的示例,您可以将您的发布数据作为Python对象获取,如下所示:
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 :(得分:-1)
在AJAX Post方法中,您应该将test作为JSON发送,在制作Post方法之前尝试这个:
obj = JSON.stringify(test);
然后使用以下命令更改数据参数:
"data": obj
它应该有用。