AJAX无法正确解析url

时间:2014-10-07 17:22:33

标签: javascript jquery python ajax flask

我有一个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对象而不是网址,但我无法弄清楚为什么会发生这种情况,以及如何修复它。

发生了什么事?

2 个答案:

答案 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'
       );