AJAX没有正确解析网址
问题描述:
我有一个HTML表单,我想提交给一个瓶颈端点/ add_int。当表单提交我与jQuery截获它,并提交表单使用AJAX端点如下: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?
我的猜测是,我的网址被解析为字符串对象而不是网址,但我无法弄清楚它为什么会发生,以及如何解决它。
发生了什么事?
答
尝试不明确指定散列键。 http://api.jquery.com/jquery.post/
$.post("{{ url_for('add_int') }}",
JSON.stringify(form),
function(resp) {
console.log(resp);
},
'application/json;charset=UTF-8'
);
答
您应该删除调用JSON.stringify
,你可以直接传递一个序列化形式为POST
数据和JSON.stringify是把你的对象变成[Object object]
。
url: '/add_int',
不工作,因为(看起来)您的前端运行在与后端不同的端口上,因此它将作为“跨域”请求被拒绝。您查看过"{{ url_for('add_int') }}"
正在返回的价值吗?
太棒了。这让我到了正确的端点! – ABM 2014-10-07 17:46:30
为了增加一点答案,'$ .ajax'需要'url'键。快捷方式(.e.g,'$ .get','$ .post')将URL作为第一个参数。 – dirn 2014-10-07 18:24:08