如何从 AJAX 帖子中获取 Flask 中的数据

Posted

技术标签:

【中文标题】如何从 AJAX 帖子中获取 Flask 中的数据【英文标题】:How to GET data in Flask from AJAX post 【发布时间】:2016-10-04 12:34:47 【问题描述】:

我想从变量“clicked”中检索数据,以便在 Flask 的 SQL 查询中使用它。

jQuery

$(document).ready(function()
  var clicked;
  $(".favorite").click(function()
    clicked = $(this).attr("name");
    $.ajax(
      type : 'POST',
      url : "url_for('test')",
      data : clicked
    );
  );
);

烧瓶/Python

@app.route('/test/', methods=['GET','POST'])
def test():
    return render_template('test.html')

【问题讨论】:

【参考方案1】:

您可以像这样在 ajax 请求中编写有效负载:

$(document).ready(function()
var clicked;
$(".favorite").click(function()
clicked = $(this).attr("name");
$.ajax(
  type : 'POST',
  url : "url_for('test')",
  contentType: 'application/json;charset=UTF-8',
  data : 'data':clicked
);
 );
);

在您的烧瓶端点中,您可以按如下方式提取值:

@app.route('/test/', methods=['GET','POST'])
def test():
     clicked=None
     if request.method == "POST":
          clicked=request.json['data']
     return render_template('test.html')

【讨论】:

变量“request”从何而来? @AdailsonDeCastro,你必须从烧瓶from flask import request 导入它 我见过的第一个完整答案。我不敢相信烧瓶人没有完整的示例,包括第 1 步 HTML/选择表单、第 2 步 Ajax 表单、第 3 步 jinja2 重新定义变量。它确实很强大,但记录得很差。再见,再见... php 对我来说,我必须调用 JSON.stringify() javascript 中的数据 我必须使用GET,而不是POST,然后它对我来说效果很好......赞成,因为它仍然是我找到的最完整的答案【参考方案2】:

在您的烧瓶应用程序端点,您可以定义检索 GET/POST 数据的方法,如下所示:

from flask_restful import reqparse

def parse_arg_from_requests(arg, **kwargs):
    parse = reqparse.RequestParser()
    parse.add_argument(arg, **kwargs)
    args = parse.parse_args()
    return args[arg]

@app.route('/test/', methods=['GET','POST'])
def test():
      clicked = parse_arg_from_requests('data')
      return render_template('test.html' , clicked=clicked)

【讨论】:

【参考方案3】:

我使用了最佳答案,但我发现了一个错误的请求错误。我解决这个错误如下:

1- 从 ajax 请求中删除这一行:

contentType: 'application/json;charset=UTF-8',

2- 通过 request.form 而不是 request.json 访问数据。

Javascript 部分将类似于:

$(document).ready(function()
var clicked;
$(".favorite").click(function()
clicked = $(this).attr("name");
$.ajax(
  type : 'POST',
  url : "url_for('test')",
  data : 'data':clicked
);
 );
);

烧瓶部分:

@app.route('/test/', methods=['GET','POST'])
def test():
      clicked=None
      if request.method == "POST":
          clicked=request.form['data']
     return render_template('test.html')

【讨论】:

以上是关于如何从 AJAX 帖子中获取 Flask 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JQuery.ajax 从每个 WordPress 帖子中获取缩略图附件?

PHP 从 AJAX 帖子中获取数据并过滤它

如何获取 Flask 请求 JSON 数据作为字典?

无法使用 Javascript AJAX 从 Summernote textarea 获取价值发送帖子数据

如何从 Node.js 中的 ajax 帖子返回成功

Python Flask 没有收到 AJAX 帖子? [复制]