2014-10-07 59 views
1

我有一个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?

我的猜测是,我的网址被解析为字符串对象而不是网址,但我无法弄清楚它为什么会发生,以及如何解决它。

发生了什么事?

回答

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' 
     ); 
+0

太棒了。这让我到了正确的端点! – ABM 2014-10-07 17:46:30

+2

为了增加一点答案,'$ .ajax'需要'url'键。快捷方式(.e.g,'$ .get','$ .post')将URL作为第一个参数。 – dirn 2014-10-07 18:24:08

2

您应该删除调用JSON.stringify,你可以直接传递一个序列化形式为POST数据和JSON.stringify是把你的对象变成[Object object]

url: '/add_int',不工作,因为(看起来)您的前端运行在与后端不同的端口上,因此它将作为“跨域”请求被拒绝。您查看过"{{ url_for('add_int') }}"正在返回的价值吗?

+0

我对JSON.stringify进行了更改,但都无济于事。 – ABM 2014-10-07 17:35:02

+1

我刚刚更新了我的答案,什么是'{{url_for('add_int')}}“'回来了?如果您检查控制台中的请求,是否正在将正确的数据传递给服务器? – 2014-10-07 17:35:20

+0

谢谢。我对url感到困惑,因为我可以毫不费力地使用url:'/ add_int'作为GET ajax请求的url – ABM 2014-10-07 17:37:19