【问题标题】:AJAX not resolving url correctlyAJAX 无法正确解析 url
【发布时间】:2014-12-02 05:06:37
【问题描述】:

我有一个要提交到烧瓶端点 /add_int 的 HTML 表单。提交表单后,我使用 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?

我的猜测是,我的 url 被解析为 String 对象而不是 url,但我不知道为什么会这样,以及如何解决它。

发生了什么事?

【问题讨论】:

    标签: javascript jquery python ajax flask


    【解决方案1】:

    您应该删除对JSON.stringify 的调用,您可以直接将序列化表单作为POST 数据传递,JSON.stringify 正在将您的对象转换为[Object object]

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

    【讨论】:

    • 我对 JSON.stringify 进行了更改,但无济于事。
    • 我刚刚更新了我的答案,"{{ url_for('add_int') }}" 返回的是什么?如果您在控制台中检查请求,现在是否将正确的数据传递到服务器?
    • 谢谢。我对 url 感到困惑,因为我可以毫无困难地使用 url: '/add_int' 作为 GET ajax 请求的 url
    • 我不能肯定地说,但看起来url_for 失败并返回错误或其他内容,而不是您期望的 url。我的建议是转储返回值,看看发生了什么。
    【解决方案2】:

    尽量不要明确指定哈希键。 http://api.jquery.com/jquery.post/

    $.post("{{ url_for('add_int') }}",
            JSON.stringify(form),
            function(resp) {
                console.log(resp);
            },
           'application/json;charset=UTF-8'
           );
    

    【讨论】:

    • 添加一点答案,$.ajax 需要url 键。快捷方式(例如,$.get$.post)将 URL 作为第一个参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 2020-08-05
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多