如何从ajax查询向python函数发送单个字符串



Context:我使用JavaScript将字符串作为参数发送到烧瓶上的python函数。但我总是得到";缺少1个参数错误";在python方面。

这就是我的Ajax查询的样子:

$.ajax({
url : 'ListMaker',
data: 'Q1',
success: function(data) {
//does something 
}
});

这就是我的python函数的样子:

@app.route("/ListMaker",methods=["POST","GET"])
def ListMaker(text):
#make it a string just incase
quarter=str(text)

//do things with string

我在网上能找到的任何其他类似的问题,都只是谈论Ajax的问题,并没有真正涉及python方面。在我的案例中,该函数显然被调用了,但它声称没有接收到可使用的数据。

我是否从Ajax端错误地发送了数据?还是我在python端错误地解析了它?


以下注释中NoneType错误的澄清:

我正在发送:

data: JSON.stringify({"letter": "Q", "value": "25%"}) 

我在python端收到的是这样的:

data=request.get_json()
letter=data["letter"]
value=data["value"]

Flask路由中的参数用于路径中的变量,在Flask:中称为"变量规则">

@app.route("/ListMaker/<text>", methods=["POST", "GET"])
def ListMaker(text):
...

由于jQueryAjax请求默认为GET,因此数据将转换为查询字符串,在本例中为/ListMaker?Q1。您可以使用flask.request.args访问Flask中的查询字符串。

但是,查询字符串是键值,并且您只提供一个键,该键将对应于Python dict{'Q1': ''}。您应该将Ajax数据设置为类似quarter=Q1的字符串,或者使用对象:

$.ajax({
url : 'ListMaker',
data: {'quarter': 'Q1'},  // or 'quarter=Q1'
success: function(data) {
//does something 
}
});

然后你就可以在Flask中访问它:

@app.route("/ListMaker", methods=["POST", "GET"])
def ListMaker():  # no parameters needed
quarter = flask.request.args["quarter"]
# quarter == "Q1"

如果要使用POST请求,请在Ajax调用中设置method: 'POST',并在Flask端使用flask.request.get_data()flask.request.get_json()

最新更新