【问题标题】:How can I pass an object with an embedded object from JavaScript (jQuery/ajax) to Python (Flask)?如何将带有嵌入对象的对象从 JavaScript (jQuery/ajax) 传递到 Python (Flask)?
【发布时间】:2019-08-28 09:11:14
【问题描述】:

我正在尝试将结构化数据从网页传递到烧瓶处理程序,但我遇到了关键错误。

在网页的 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"
   });

【问题讨论】:

  • 当然,我在发帖后就取得了进步!首先,我必须在网页 javascript: var updateData = {cid : 1, att: JSON.stringify(controllerData) } 中创建我的复合对象,然后在 Flask/Python 端我需要将 att 字符串转换为字典: 属性 = json.loads(request.form["att"])。这解决了它!

标签: javascript python jquery json flask


【解决方案1】:

您必须使用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 或包含循环依赖的对象不能这样序列化

【讨论】:

  • contentType: 'application/json' 也可能需要
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 2013-01-30
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多