我有一个非常简单的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);
}
});
});
答案 0 :(得分:1)
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']
。