【问题标题】:Avoid 405 errors using AJAX with Flask + JINJA使用 AJAX 和 Flask + JINJA 避免 405 错误
【发布时间】:2014-04-21 01:46:35
【问题描述】:

请温柔,因为我对后端工作很陌生,但已经搜索过试图找到答案。

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

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

这是我的 JINJA2 模板代码。我正在尝试获取一个 id,将其传递给我的烧瓶函数,该函数返回结果并填充相关的 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)

【问题讨论】:

  • 尝试在您的 API 控制器方法中执行 GET 而不是 POST。打开 Chrome 的调试器和网络选项卡,查看调用 ajax 函数时使用的 HTTP 方法。

标签: javascript python ajax flask jinja2


【解决方案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)

【讨论】:

  • 谢谢。我喜欢stackoverflow!
猜你喜欢
  • 1970-01-01
  • 2018-07-04
  • 2019-01-24
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 2011-10-01
  • 2014-07-19
相关资源
最近更新 更多