Jquery和Flask:如何理解表单提交功能中的'return false' [重复]

Posted

技术标签:

【中文标题】Jquery和Flask:如何理解表单提交功能中的\'return false\' [重复]【英文标题】:Jquery and Flask: how to understand the 'return false' in form submit function [duplicate]Jquery和Flask:如何理解表单提交功能中的'return false' [重复] 【发布时间】:2016-06-25 00:54:27 【问题描述】:

在我的项目中,我使用 Python Flask 作为服务器端,JS 作为前端。该项目允许用户选择一张照片并使用 AJAX 发布方法将照片发送到服务器端。并且服务器端会对这张照片进行图像处理,并将一些关于图像的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")

【问题讨论】:

【参考方案1】:

如果点击提交按钮,浏览器将提交带有提交按钮的表单,除非在返回false的流程中执行了javascript函数。

这样做的最初目的是为了验证:

(a) 用户输入数据并点击提交, (b) 运行 js 代码进行表单验证, (c) 如果验证码返回false,则会阻止表单提交。

当然,我们现在有 Ajax,它可以自行提交或执行其他魔法。 return false; 是并且可能总是需要防止浏览器自己进行(另一个)提交。

存在类似的行为,例如超链接:如果<a href 的 onclick 事件返回 false,则单击超链接将运行 js,但不会导航到链接。

【讨论】:

以上是关于Jquery和Flask:如何理解表单提交功能中的'return false' [重复]的主要内容,如果未能解决你的问题,请参考以下文章

flask 表单提交问题,如何实现点击执行执行按钮,执行下拉框选择的部分

jquery submit和ajax提交表单的区别

如何将 Jquery 表单提交功能更改为 AngularJS 功能?

jQuery - 如何在 Ajax 表单提交中添加“或”

如何在Python框架Flask中将图像文件从表单上传到数据库

如何在同一功能中处理“Enter”和“Click” - 表单提交[重复]