通过JQuery通过AJAX向python发送变量列表

时间:2013-06-24 14:35:05

标签: javascript jquery python ajax

在我的项目中,我有javascript迭代一组单选按钮。首先,它检查名称集中所选按钮是否已更改,如果已经更改,则会记录该行新选择的按钮的值,并将其附加到变量dataString,然后再继续下一个按钮组。这一切都很好,它可以完美地收集所有数据。但是,当我尝试通过AJAX发送数据时,我遇到了问题。

对于每个更改的行,我会附加一个rowName变量和一个deviceName变量dataString。理想情况下,我想发送这些内容,当我将数据发送到Python时,我最终得到一个rowName列表和一个deviceName列表,就像发送多个同名变量时一样。

我的AJAX调用如下:

var call= $.ajax({
    type: "POST",
    url: "http://localhost/cgi-bin/savestate.py",
    data: dataString
}).done(function() {
    document.getElementById("upper").innerHTML+=(call.responseText);
});

正如我所说,我需要发送的数据收集得足够好。现在,dataString的格式设置如下:

"{rowName: 'firstRowName', deviceName: 'firstDeviceName', rowName: 'secondRowName', deviceName: 'secondDeviceName'}"

我也尝试更改AJAX调用,以便data:调用看起来像:

data: {dataString}

dataString格式化为:

"rowName: 'firstRowName', deviceName: 'firstDeviceName', rowName: 'secondRowName', deviceName: 'secondDeviceName'"

无论哪种方式我尝试发送它,数据都没有到达python脚本。当我从Python返回数据时,它出现为

FieldStorage(None, None, [])

现在由于AJAX调用中data:属性的格式为{keyname: value, etc},是否可以以该格式在预制列表中发送数据,或者我是否需要更改方式格式化dataString并以其他方式发送它?

2 个答案:

答案 0 :(得分:0)

我最终以两种方式达到了预期的效果。

第一种方法:回想一下在实施JQuery之前我是如何执行AJAX请求的,我将dataString格式化为

rowName=firstRowName&deviceName=firstDeviceName&rowName=secondRowName&deviceName=secondDeviceName

等等。然后我只是在AJAX调用中将它附加到我的url,所以它看起来像:

url:"http://localhost/cgi-bin/saveState.py"+dataString

第二种方法:我让它工作的另一种方式是以与第一种方法相同的方式格式化dataString,但之后只需将其用作我的{{1属性。

data

我发现这很有用,因为它根本不遵循data: dataString 调用的通常格式。但唉,确实有效。

答案 1 :(得分:0)

在初始尝试中,您将以JSON格式将POST数据发送到Ajax方法。但是,FieldStorage期望它采用表单格式(application / x-www-form-urlencoded)。您在答案中提到的两种方法将它以表单格式提供给Ajax方法。

除了您的解决方案,另一种方法是使用JSON解析库而不是FieldStorage。具体如何做到这取决于您使用的框架 - 是Django,Pyramid等吗?