使用带有Flask + JINJA的AJAX避免405错误

时间:2014-04-21 01:46:35

标签: javascript python ajax flask jinja2

请保持温和,因为我是后期工作的新手,但我们一直试图寻找答案。

我正在创建一个返回从第三方API检索到的搜索结果的应用程序。

我正在实现对该API的另一个调用,以检索有关单个结果的更多信息,我想通过AJAX来实现。

这是我的JINJA2模板代码。我正在尝试获取一个id,将其传递给我的flask函数,该函数返回结果并填充相关的div。在服务器上,我得到了405响应。

{% extends "layout.html" %}
{% block body %}
<script type=text/javascript>
  $(function() {
    $("a#listComments").bind('click', function() {
        $.getJSON('list_comments', {
            a: $('li[id="id"]').val()
        }, function(data) {
            $("#comments").text(data.result);
        });
    console.log("This actually worked");
     });
  });
</script>
  <form>
  <ul class=table>
  {% for result in results %}
    <li id="id">{{ result.id }}</li>
    <p>{{ result.title }}</p>
    <p><a href="javascript:void();" id="listComments">List Comments</a>
    <span id="comments">?</span>
  {% else %}
    <li><em>Unbelievable, no results</em>
  {% endfor %}
  </ul>
  </form>
{% endblock %}

这是我接受json并返回结果的简单函数(我构建了一个单独的函数来调用API,未显示)。

@app.route('/list_comments', methods=['POST'])
def listComments():
    if not session.get('logged_in'):
        abort(401)
    if request.method == 'POST':
        #a = request.args.get('a', 0, type=int)
        comments = getComments(a)
        return jsonify(comments)

1 个答案:

答案 0 :(得分:1)

问题很清楚你的路由只允许使用POST方法,但你使用$.getJSON如果你想使用POST方法,它是一个GET方法

尝试$.post

$.post('/list_comments', { 
              a: $('li[id="id"]').val()
          }, function(data) {
          //data contains the JSON object
}, "json");

@app.route('/list_comments', methods=['POST'])
@login_required
def listComments():
    a = request.form.get('a')
    comments = getComments(a)
    return jsonify(comments)

如果您想使用GET方法

试试这个

@app.route('/list_comments', methods=['GET'])
@login_required
def listComments():
    a = request.args.get('a', 0, type=int)
    comments = getComments(a)
    return jsonify(comments)