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

024*_*881 11 python ajax jquery flask

我想从变量'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
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

瓶/ Python的

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

Sug*_*gam 13

你可以在你的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}
});
 });
});
Run Code Online (Sandbox Code Playgroud)

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

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

  • @AdailsonDeCastro,您必须从flask导入请求,从flask导入请求 (4认同)
  • 我见过第一个完整的答案.我不敢相信烧瓶的人没有完整的例子,步骤1 HTML/select表格,第2步Ajax表格,第3步jinja2重新定义变量.它的功能很强大,但记录得非常糟糕.再见,再见...... php! (4认同)
  • 对我来说,我必须对 javascript 中的数据调用 ``JSON.stringify()`` (4认同)
  • 变量“ request”来自哪里? (2认同)

小智 6

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

1-从ajax请求中删除此行:

contentType: 'application/json;charset=UTF-8',
Run Code Online (Sandbox Code Playgroud)

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}
});
 });
});
Run Code Online (Sandbox Code Playgroud)

烧瓶部分:

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