使用Flask通过AJAX传递一个字段

Pass just one field via AJAX with Flask

本文关键字:一个 字段 Flask 通过 AJAX 使用      更新时间:2023-09-26

我有一个非常简单的HTML表单,只有一个<input type='text'>字段,一个电子邮件地址,我需要通过AJAX传递回Python脚本。我似乎无法接收到另一端的价值。(因为只有一个字段,所以可以避免所有JSON编码/解码吗?)

代码如下:

from flask import Flask, render_template, request, json
import logging
app = Flask(__name__)
@app.route('/')
def hello():
    return render_template('index.htm')
@app.route('/start', methods=['POST'])
def start():
    # next line outputs "email=myemail@gmail.com"
    app.logger.debug(request.json);
    email = request.json['email'];
    # next line ALSO outputs "email=myemail@gmail.com"
    app.logger.debug(email);
    return json.dumps({ 'status': 'OK', 'email': email })
if __name__ == "__main__":
   app.run()

以及从HTML端发送AJAX的Javascript——

$( "form" ).on( "submit", function( event ) {
    event.preventDefault();
    d = "email=" + $('#email').val();  // this works correctly
    // next line outputs 'sending data: myemail@gmail.com'
    console.log("sending data: "+d);
    $.ajax({
        type: "POST",
        url: "{{ url_for('start') }}",
        data: JSON.stringify(d),
        dataType: 'JSON',
        contentType: 'application/json;charset=UTF-8',
        success: function(result) {
            console.log("SUCCESS: ");
            // next line outputs 'Object {email: "email=myemail@gmail.com", status: "OK"}'
            console.log(result);
        }
    });
});

JSON。stringify用于将对象转换为json格式的字符串,但是您没有对象,只有字符串。试试这个:

var d = { email: $('#email').val() };

JSON.stringify(d)现在将把它转换成json格式的字符串:

{email: "myemail@gmail.com"},可以用烧瓶解析。


不使用JSON:

var d = { email: $('#email').val() };
...
// AJAX
    data: d,
    success: ...

这将把{email: "myemail@gmail.com"}变成email=mymail@gmail.com,并将其作为POST请求的主体发送。在Flask中,使用request.form['email']