我试图将结构化数据从网页传递到烧瓶处理程序,但出现关键错误。

在网页的JavaScript中,我有一个包含两个元素的对象,一个是值,另一个是对象。

问题出在Flask / Python方面。我可以这样获得第一个元素("cid"):

print request.form ["cid"]


这样可行。但是,我无法访问或获取任何att(ribute)值("att")。

因此,request.form ["att"]返回KeyError: 'att'

我可以访问request.form["att[sw1]"],但是这使我的数据类型扁平化。

我想以列表或字典的形式获取att元素,以便可以在应用程序中遍历它们。我本质上想要request.form["att"]["sw1"]request.form.att["sw1"]

   var controllerData = {
              sw1  : $('#sw1').val(),
              sw2  : $('#sw2').val(),
              sw3  : $('#sw3').val(),
              sw4  : $('#sw4').val()}

   var updateData = {cid : 1, att: controllerData };

   $.ajax({
     type: "POST",
     url:  "/SetSettings",
     data: updateData,
     success: function(d) { },
     error: function(d) {alert('Error saving settings!');},
     dataType: "json"
   });

最佳答案

您必须将数据对象序列化为使用JSON.stringify()的字符串。

$.ajax({
   type: "POST",
   url:  "/SetSettings",
   data: JSON.stringify(updateData),
   success: function(d) { },
   error: function(d) {alert('Error saving settings!');},
   dataType: "json"
});


PS:一些物体,例如window或包含循环依赖项的对象无法以这种方式序列化

10-04 16:11