Jquery 和 Flask:如何理解表单提交功能中的 'return false'
Jquery and Flask: how to understand the 'return false' in form submit function
在我的项目中,我使用Python Flask作为服务端,JS作为前端。该项目允许用户 select 一张照片,并使用 AJAX post 方法将照片发送到服务器端。服务器端会对这张照片进行图像处理,并将一些关于图像的JSON格式的数据返回给前端。
JS代码如下:
$(document).ready(function(){
$("form").submit(function() {
var form_data = new FormData($('#upload-file')[0]);
$.ajax({
type: 'POST',
url: '/upload',
data: form_data,
contentType: false,
cache: false,
processData: false,
async: false,
success: function(result) {
var ctx = document.getElementById("result").getContext("2d");
res = JSON.parse(result)
var data = {
labels: res['sentiment'],
datasets: [
{
label: "Face Analysis",
fillColor: "white",
data: res['score']
}
]
};
var myLineChart = new Chart(ctx).Bar(data, {
showScale: false
});
},
});
return false; // so that form doesn't try to complete post
});
});
有一点让我很困惑,最后一行return false
,它的作用是什么?如果我删除此行,应用程序将失败。我从其他资源上找到这个,虽然后面有评论,还是没弄明白是什么意思?
Flask 路线如下:
@app.route('/upload', methods=['POST'])
def upload_file():
if request.method == 'POST':
#print "post method"
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
#return redirect(url_for('uploaded_file',filename=filename))
result = image_analysis(os.path.join(app.config['UPLOAD_FOLDER'], filename))
print type(result)
return json.dumps({'sentiment':result.keys(),'score':result.values()})
#return json.dumps({'aftervalue':"baoqger"})
如果单击提交按钮,浏览器将提交带有提交按钮的表单,除非在 returns false
的流程中执行了 javascript 函数。
这样做的初衷是为了验证:
(a) user enters data and clicks submit,
(b) js code is run to do form validation,
(c) form submit is prevented if validation code returned false
.
当然我们现在有 Ajax 可以自行提交或执行其他魔术。 return false;
是并且可能永远需要防止浏览器自己进行(另一个)提交。
存在类似的行为,例如hyperlinks:如果 <a href
具有 returns false 的 onclick 事件,则单击 hyperlink 将 运行 js 但不会导航到link.
在我的项目中,我使用Python Flask作为服务端,JS作为前端。该项目允许用户 select 一张照片,并使用 AJAX post 方法将照片发送到服务器端。服务器端会对这张照片进行图像处理,并将一些关于图像的JSON格式的数据返回给前端。
JS代码如下:
$(document).ready(function(){
$("form").submit(function() {
var form_data = new FormData($('#upload-file')[0]);
$.ajax({
type: 'POST',
url: '/upload',
data: form_data,
contentType: false,
cache: false,
processData: false,
async: false,
success: function(result) {
var ctx = document.getElementById("result").getContext("2d");
res = JSON.parse(result)
var data = {
labels: res['sentiment'],
datasets: [
{
label: "Face Analysis",
fillColor: "white",
data: res['score']
}
]
};
var myLineChart = new Chart(ctx).Bar(data, {
showScale: false
});
},
});
return false; // so that form doesn't try to complete post
});
});
有一点让我很困惑,最后一行return false
,它的作用是什么?如果我删除此行,应用程序将失败。我从其他资源上找到这个,虽然后面有评论,还是没弄明白是什么意思?
Flask 路线如下:
@app.route('/upload', methods=['POST'])
def upload_file():
if request.method == 'POST':
#print "post method"
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
#return redirect(url_for('uploaded_file',filename=filename))
result = image_analysis(os.path.join(app.config['UPLOAD_FOLDER'], filename))
print type(result)
return json.dumps({'sentiment':result.keys(),'score':result.values()})
#return json.dumps({'aftervalue':"baoqger"})
如果单击提交按钮,浏览器将提交带有提交按钮的表单,除非在 returns false
的流程中执行了 javascript 函数。
这样做的初衷是为了验证:
(a) user enters data and clicks submit,
(b) js code is run to do form validation,
(c) form submit is prevented if validation code returnedfalse
.
当然我们现在有 Ajax 可以自行提交或执行其他魔术。 return false;
是并且可能永远需要防止浏览器自己进行(另一个)提交。
存在类似的行为,例如hyperlinks:如果 <a href
具有 returns false 的 onclick 事件,则单击 hyperlink 将 运行 js 但不会导航到link.