在Python中使用数组迭代javascript对象
我有一堆文本框来获取用户的输入。当用户单击一个“完成”按钮(只是一个常规按钮)时,我获取所有输入并将其存储在关联数组中,然后将其传递给我的python方法 这就是数据的样子: 然后将其转换为json并发送到python函数:在Python中使用数组迭代javascript对象,javascript,python,ajax,pyramid,Javascript,Python,Ajax,Pyramid,我有一堆文本框来获取用户的输入。当用户单击一个“完成”按钮(只是一个常规按钮)时,我获取所有输入并将其存储在关联数组中,然后将其传递给我的python方法 这就是数据的样子: 然后将其转换为json并发送到python函数: $.ajax({ url: "http://127.0.0.1:6543/create_device", type: "POST", data: JSON.stringify(data), contentTy
$.ajax({
url: "http://127.0.0.1:6543/create_device",
type: "POST",
data: JSON.stringify(data),
contentType: 'application/json; charset=utf-8',
success: function (response, textStatus, jqXHR) {
alert("done");
},
error: function (jqXHR, textStatus, errorThrown) {
//change this back to error throwing after wards
alert("error");
}
});
在我的python函数中,我有以下内容:
def create_device(request):
#get the json data from the ajax call
data = request.json_body
for key in data:
print "key: " + key
这个问题是我不确定如何迭代存储在genericData
和staticData
下的数组。当我尝试迭代它们时,它似乎只是迭代单词中的字符,而不是数组。这就是我的javascript的外观(请参阅图片以查看数据的外观):
编辑
这段代码似乎可以工作,只是我的数组是空的,我不知道如何工作
for key in data:
for val in data[key]:
print "-----------------" + val
在我的javascript中,我有
genericData
和staticData
作为=newarray()
。相反,我只是这样做:
var genericData = {};
var staticData = {};
然后其他一切都保持不变:
var data = { 'genericData' : genericData, 'staticData': staticData };
JSON.strinify(data).
现在,我的python代码可以按我所希望的那样工作。在我的javascript中,我使用了
genericData
和staticData
作为=newarray()
。相反,我只是这样做:
var genericData = {};
var staticData = {};
然后其他一切都保持不变:
var data = { 'genericData' : genericData, 'staticData': staticData };
JSON.strinify(data).
现在,我的python代码可以按我所希望的那样工作。所以您有两个数组,但使用它们作为“关联数组”、“dicts”或“objects”,这仍然很好,因为您可以在JS中为数组分配任意属性:
var a = []; // equivalent to a = new Array();
a.foo = 'boo';
但阵列始终为空:
console.log(a.foo); // prints 'boo'
console.log(a['foo']); // equivalent to the above, prints 'boo'
console.log(a.length); // 0 - the array is empty
console.log(a[0]); // undefined
因此,当它们被传递到JSON.stringify时,它只是将它们序列化为空数组:[]
,因为,很明显,当JSON序列化程序看到一个数组时,它会将其序列化为数组,而不是对象
在您的屏幕截图上,您可以清楚地看到:您有一个长度为零的数组,其中分配了一些附加属性
那真是一种有创意的射中自己脚的方法:))
进一步阅读:
- (很好地说明了这个问题)
var a = []; // equivalent to a = new Array();
a.foo = 'boo';
但阵列始终为空:
console.log(a.foo); // prints 'boo'
console.log(a['foo']); // equivalent to the above, prints 'boo'
console.log(a.length); // 0 - the array is empty
console.log(a[0]); // undefined
因此,当它们被传递到JSON.stringify时,它只是将它们序列化为空数组:[]
,因为,很明显,当JSON序列化程序看到一个数组时,它会将其序列化为数组,而不是对象
在您的屏幕截图上,您可以清楚地看到:您有一个长度为零的数组,其中分配了一些附加属性
那真是一种有创意的射中自己脚的方法:))
进一步阅读:
- (很好地说明了这个问题)
JSON.stringify()
-只需直接传递data
(如$.ajax()调用中的data:data
)。如果Python使用的是对象而不是字符串,则可能需要导入JSON
和data=JSON.loads(数据)
您在Python方面使用的是什么框架?对不起,我应该说明一下。我使用的是金字塔框架我添加的代码,除了我的数组似乎是空的,我不知道为什么,或者我的代码是错误的。你可能不应该调用JSON.stringify()
-直接传递数据
(比如,$.ajax()
调用中的data:data
)。检查Python是否使用对象而不是字符串,您可能需要导入json和data=json。加载(数据)
您在Python方面使用的是什么框架?对不起,我应该说明这一点。我使用的是金字塔frameworkI添加的代码,只是我的数组似乎是空的,我不知道为什么,或者我的代码是错误的。所以你有两个数组,但使用它们作为“关联数组”、“dicts”或“objects”,这仍然很好,因为你可以在JS:var a=[]中为数组分配任意属性;a、 foo='boo'
。但是数组总是空的,所以当它们被传递到JSON.stringify
时,它只是将它们序列化为空数组:[]
,因为很明显,当JSON序列化程序看到一个数组时,它会将其序列化为数组,而不是对象。。。这是一种创造性的方法,可以射自己的脚:))当我在控制台中检查数组时,当它到达JSON.stringify时,数组并不是空的,那时数组看起来是空的,但直到那时它们才包含数据。我这样分配它们:genericData[strippedName]=value
我扩展了我的注释,并将其作为一个单独的答案添加,因此您有两个数组,但将它们用作“关联数组”或“dicts”或“objects”,这仍然可以很好地工作,因为您可以在JS中为数组分配任意属性:var a=[];a、 foo='boo'
。但是数组总是空的,所以当它们被传递到JSON.stringify
时,它只是将它们序列化为空数组:[]
,因为很明显,当JSON序列化程序看到一个数组时,它会将其序列化为数组,而不是对象。。。这是一种创造性的方法,可以射自己的脚:))当我在控制台中检查数组时,当它到达JSON.stringify时,数组并不是空的,那时数组看起来是空的,但直到那时它们才包含数据。我这样分配它们:genericData[strippedName]=value
我扩展了我的注释并将其作为单独的答案添加