【问题标题】:Problems in trying to POST json data to python flask server尝试将 json 数据发布到 python 烧瓶服务器时出现问题
【发布时间】:2013-05-23 05:23:33
【问题描述】:

我正在尝试将 json 发布到我的烧瓶服务器,但发布请求总是失败。我就是这样做的,知道做错了什么吗?

jQuery.ajax({
    url:'/someLink',
    method:'POST',
    data:JSON.stringify({"sampleKey":"Value"}),
    success:function(data){
        console.log(data);
    },
});

我的烧瓶服务器看起来像

@app.route('/someLink', methods=['POST'])
def someFn():
 sampleKey = str(request.form['sampleKey'])

我认为存在一些数据序列化问题,因为以下请求有效

jQuery.post('/someLink',{"sampleKey":"Value"},function(data){console.log(data)});

【问题讨论】:

  • 有什么进展吗?我的解决方案对您有用吗?
  • 嗨,本杰明,我的课堂作业卡住了,还没来得及看。几小时后通知你。对不起。

标签: javascript jquery python flask


【解决方案1】:

jQuery 的.ajax 接受普通对象或查询字符串作为数据参数。它不接受 JSON 编码的字符串。

默认情况下,它以'application/x-www-form-urlencoded; charset=UTF-8' 发送数据,这意味着除非您像 Ian 建议的那样明确覆盖它(并且服务器期望它),否则您不应传递 JSON 编码的字符串。

您可以通过传递对象轻松解决此问题。

来自the API

数据

类型:PlainObject 或 String

要发送到服务器的数据。如果还不是字符串,则将其转换为查询字符串。它附加到 GET 请求的 url。请参阅 processData 选项以防止此自动处理。对象必须是键/值对。如果 value 是一个 Array,jQuery 会根据传统设置的 value 序列化多个具有相同 key 的值(如下所述)。

试试

jQuery.ajax({
    url:'/someLink',
    method:'POST',
    data:{"sampleKey":"Value"},
    success:function(data){
        console.log(data);
    }
});

【讨论】:

  • 它确实接受 JSON 编码的字符串 - 您可以将 contentType 选项设置为“application/json”。但我认为服务器必须知道如何理解/解析它。尽管如此,您的答案似乎是正确的,因为您传递的对象数据与 OP 的 $.post() 相同
  • @Ian 这对我来说是新的(JSON 字符串为 data:)并且似乎与 API 文档所说的相矛盾,你介意拿出一个小提琴来显示这个吗(jsfiddle 在 /echo/ 上做 JSON json)?
  • @Ian 没关系。我明白了你的意思,只是发送一个字符串作为 POST 请求的 BODY 并告诉服务器表单是使用 application/json 而不是 url-encoded 编码的。这不是一个特定的功能。好点,我会更新答案,谢谢。
  • 是的,我想只有当contentType 被覆盖时。所以从技术上讲,这不是$.ajax() 功能。我可能不应该提到它,但它引起了我的注意,因为我知道我以前见过人们使用它(不是我个人)。我并不是想说它应该在这里使用,否则您的错误;只是评论你的那句话
  • 嘿伙计们,不幸的是,soln 没有工作。所以我创建了一个 switch catch 并同时使用了 jQuery.get 和 jQuery.post。
猜你喜欢
  • 2019-12-01
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 2023-03-11
  • 2021-11-21
  • 1970-01-01
  • 2013-05-22
  • 2015-04-10
相关资源
最近更新 更多