【问题标题】:Send JSON data to Flask server using JQuery .load()使用 JQuery .load() 将 JSON 数据发送到 Flask 服务器
【发布时间】:2020-11-21 12:01:21
【问题描述】:

我正在尝试使用 JQuery 的 .load() 函数将数据发送到我的 Flask 服务器,并使用它来渲染加载到调用元素中的 <div>。我的电话看起来像这样:

$("#element").load(
  "/get_data",
  {"info": info} // this is the problem
)

但是,当我尝试在我的 Flask 后端访问这些数据时,数据是字节字符串形式的。 (使用request.get_data() 访问会产生一个字节串,request.get_json() 会产生None)。

这并不让我感到惊讶,因为当我使用 .ajax() 请求时会发生相同的行为。使用 Ajax,我只需使用 data: JSON.stringify({"info":info}) 并将 json.loads 轻松读取的字符串发送到 Flask 后端就好了。令我困惑的是,当我尝试使用.load() 进行相同的数据打包时,对服务器的请求是GET 而不是POST

根据.load()documentation,“如果数据作为对象提供,则使用 POST 方法;否则,假定为 GET。”我不明白为什么作为 JSON 字符串的数据会以这种方式改变 .load() 的行为。

我很想了解这种行为,但我的问题是如何使用 JQuery 的 .load() 将数据作为 JSON 格式的 POST 请求发送到 Flask 后端,或者至少可以读取为一个 json(例如 JSON 字符串)?

【问题讨论】:

  • 您是否使用了正确的 Content-Type 标头 (application/json)?
  • 这篇文章可能会提供你需要的解决方案stackoverflow.com/questions/53502324/decode-json-in-flask
  • @AndreaPollini 我将如何断言传入请求的内容类型?你不能通过 .load() 这样做,我不清楚你将如何在后端做到这一点。

标签: javascript python jquery json flask


【解决方案1】:

您的代码应该可以工作。您有{"info": info} 的数据,这是.load 应该作为POST 发送的对象。确保从服务器获取 JSON mimetype 对象。另外,请确保您的 Flask 视图接受 POST 方法:

from flask import Flask, request, Response
import json

@app.route('/get_data', methods = ['GET', 'POST'])
def get_data():
    payload_dict = json.loads(request.data.decode('utf-8'))
    # or try payload_dict = request.json
    print(payload_dict["info"])
    return Response(json.dumps({"info_response": "hello"}), mimetype='application/json')

并确保您在{"info": info} 中定义了info

考虑过使用getJSON:https://api.jquery.com/jQuery.getJSON/

【讨论】:

  • 我认为您误解了这个问题。这会将 JSON 数据从服务器发送到前端。我希望将数据从前端发送到 Flask 服务器。
  • 您的代码应该这样做。除非info 没有定义。应该是{info: "info"}?另外,您的观点是否接受POST 方法?
  • 没有信息只是填充物,但我的代码中的实际内容确实存在。我认为错误是 .load 将 JSON 字符串作为 GET 请求发送,但我不知道如何让 Flask 处理 JSON 对象
  • 感谢您的帮助;不幸的是,没有任何效果。我决定简单地解析字节串,这并不理想,但它仍然有效。
  • 你在我的回答中使用了.decode('utf-8') 部分吗?
猜你喜欢
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 2021-10-15
  • 2012-12-29
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多