我有一个HTML表单,我想提交给烧瓶端点/ add_int。提交表单时,我使用Jquery拦截它,并使用AJAX将表单提交到端点,如下所示:
var form = $( this ).serialize()
$.post({
url: "{{ url_for('add_int') }}",
data: JSON.stringify(form),
contentType: 'application/json;charset=UTF-8',
success: function(resp) {
console.log(resp);
}
});
端点如下所示:
@app.route('/add_int', methods=['GET', 'POST'])
@login_required
def add_int():
# do stuff
return jsonify(status="success!")
我的问题是我从未到达终端。
当我检查我的控制台时,我看到了
POST http://127.0.0.1:5000/[object%20Object] 404 (NOT FOUND)
而不是
POST http://127.0.0.1:5000/add_int
正如我所料。
请注意,如果我设置
url: '/add_int',
我遇到了同样的问题。
我发现使用几乎完全相同的代码的案例没有提到这个问题: 例如how can I use data posted from ajax in flask?
我的猜测是,我的网址被解析为String对象而不是网址,但我无法弄清楚为什么会发生这种情况,以及如何修复它。
发生了什么事?
答案 0 :(得分:2)
您应该移除对JSON.stringify
的调用,您可以直接将序列化表单作为POST
数据传递,JSON.stringify会将您的对象转换为[Object object]
。
url: '/add_int',
无法正常工作,因为(看起来)您的前端正在与后端不同的端口上运行,因此它将被拒绝为"跨域"请求。您是否检查过"{{ url_for('add_int') }}"
正在返回的值?
答案 1 :(得分:1)
尽量不要明确指定哈希键。 http://api.jquery.com/jquery.post/
$.post("{{ url_for('add_int') }}",
JSON.stringify(form),
function(resp) {
console.log(resp);
},
'application/json;charset=UTF-8'
);