JS数组不是用AJAX发送到python脚本的

时间:2016-11-13 23:17:33

标签: javascript jquery arrays ajax python-2.7

一个想法是使用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()

2 个答案:

答案 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

它应该有用。