Jquery和Flask:如何理解表单提交功能中的’return false’

Jquery and Flask: how to understand the 'return false' in form submit function

本问题已经有最佳答案,请猛点这里访问。

在我的项目中,我使用python flask作为服务器端,使用JS作为前端。该项目允许用户选择一张照片,并使用Ajax Post方法将照片发送到服务器端。服务器端将对这张照片进行图像处理,并将有关图像的一些JSON格式的数据发送回前端。JS代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$(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,它的功能是什么?如果我删除这一行,应用程序将失败。我是从其他资源中找到这个的,虽然之后有评论,但还是找不到它的含义?

烧瓶路线如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@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"})

如果单击提交按钮,浏览器将提交带有提交按钮的表单,除非在返回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;

类似的行为也存在于超链接中:如果一个的onclick事件返回false,那么单击该超链接将运行JS,但不会导航到该链接。