如何在烧瓶中使用从 ajax 发布的数据?
Posted
技术标签:
【中文标题】如何在烧瓶中使用从 ajax 发布的数据?【英文标题】:how can I use data posted from ajax in flask? 【发布时间】:2013-02-01 06:20:14 【问题描述】:我在获取从 jquery ajax 发布的数据时遇到问题。
$('#clickme').click( function()
var data = save_input(); // data
data['_sid'] = $survey_id; // survey_id injected from flask
data['_uip'] = $user_ip; // user_ip injected from flask, request.remote_addr
$.ajax(
type : "POST",
url : " url_for('mod.load_ajax') ",
data: JSON.stringify(data),
contentType: 'application/json;charset=UTF-8',
success: function(result)
console.log(result);
);
console.log(data);
);
从代码来看,data
是一个类似 javascript 的对象
'foo' : 'foo',
'bar' : 'bar',
'fo_' : 42,
我想在烧瓶中做的是:
@mod.route('/load_ajax', methods=["GET", "POST"])
def load_ajax():
if request.method == "POST":
# load _sid and _uip from posted JSON and save other data
# but request.form is empty.
# >>> request.form
# ImmutableMultiDict([])
return str(request.form)
看到,发出了ajax请求但没有提交数据。我用ajax 做console.log(data)
,所以我可以看到我在jquery 的data
变量中确实有一些有意义的数据。但是 ajax 视图中的 request.form 是空的。我的数据在哪里提交?
【问题讨论】:
将JSON.stringify(data)
更改为 data
看看会发生什么。
@Blender 我确实收到了数据。如何以 JSON 格式接收此内容?
你试过request.json
吗?
@thkang 将其用作数据字符串:"data=" + JSON.stringify(data);
。
【参考方案1】:
试试
$.ajax(
type : "POST",
url : " url_for('mod.load_ajax') ",
data: JSON.stringify(data, null, '\t'),
contentType: 'application/json;charset=UTF-8',
success: function(result)
console.log(result);
);
然后从服务器,你可以像这样引用数据中的变量:
request.json['foo']
由于内容类型被指定为application/json
,因此数据在request.json
中
【讨论】:
一直在寻找这个,request.json['foo'] 为我做了。谢谢:)charset=UTF-8
是诀窍。我找了好几个小时。
是的,当 jquery ajax 设置中没有 contentType 时,Flask request.data 为空【参考方案2】:
根据您的示例,您没有发送键值对,而是将 JSON 字符串分配给 jQuery 数据选项。正如 cmets 中提到的,您必须对 JSON 进行字符串化,创建一个带有键的对象(将用于从烧瓶中访问 JSON 字符串),然后将其分配给 jQuery 数据键。
$.ajax(
type : "POST",
url : " url_for('mod.load_ajax') ",
data: json_str: JSON.stringify(data),
contentType: 'application/json;charset=UTF-8',
success: function(result)
console.log(result);
);
@mod.route('/load_ajax', methods=["GET", "POST"])
def load_ajax():
if request.method == "POST":
# load _sid and _uip from posted JSON and save other data
# but request.form is empty.
# >>> request.form
# ImmutableMultiDict([])
return str(request.form['json_str']
)
【讨论】:
【参考方案3】:在烧瓶一侧,使用:
data = request.get_json()
变量数据现在有了您使用 ajax 发送的字典,您现在可以使用 python 对其进行操作
【讨论】:
在连续熬夜 24 小时后编写了该代码。错过了一些东西。我把它收回。它完美地工作。我的错。【参考方案4】:您是否尝试过删除 contentType?您假设将数据发布到 Flask。
您可以尝试添加虚假数据,例如
data:"hello":"world" 在 ajax 中?只是为了检查 hello world 是否到达 request.form
【讨论】:
【参考方案5】:从 Ajax (Flask) 获取数据
html:
<input type="text" id="inputbox" autocomplete="off">
Js:
$(document).ready(function()
$("#inputbox").on("input",function(e)
inputbox = $("#inputbox").val();
console.log(inputbox)
$.ajax(
method: "post",
url: "/path",
data: inputbox,
success:function(res)
)
);
);
.py:
search_value = request.form.get("text")
【讨论】:
以上是关于如何在烧瓶中使用从 ajax 发布的数据?的主要内容,如果未能解决你的问题,请参考以下文章