我试图使用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()
的文档,“如果数据是作为对象提供的,那么就使用POST方法;否则,假设是GET。”我不明白为什么数据是JSON会这样改变.load()
的行为。
我很想了解这种行为,但是我的问题是如何使用JQuery的.load()
将数据以JSON的形式作为POST请求发送到Flask后端,或者至少作为json (例如JSON字符串)的可读性?
发布于 2020-07-31 08:05:03
你的代码应该能用。数据作为{"info": info}
,这是一个.load
应该作为POST发送的对象。确保从服务器获得对象。另外,确保您的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/?
https://stackoverflow.com/questions/63195230
复制