HTML-страница не отображается из Flask после вызова AJAX - PullRequest
0 голосов
/ 23 марта 2019

Я хочу отправить переменную JavaScript с изображением, которое пользователь будет загружать в мой файл Flask, где будет выполняться обработка.Поэтому я использую Formdata и AJAX-вызов для одного и того же.Но после того, как данные и изображение получены в колбе и завершена обработка, я не могу отобразить HTML-страницу в колбе, которая отобразит обработанное изображение.

Код сценария Java:

formdata = new FormData();      
jQuery("#image_to_upload").on("change", function() {     // On Change Of image upload
    var file = this.files[0];
    if (formdata) {
        formdata.append("file", file);
        formdata.append("array", filtersActive);
        jQuery.ajax({
            url: "/object-detect-uploader",   
            type: "POST",
            data: formdata,
            processData: false,
            contentType: false,
            success:function(){}
        });
    }                       
});

Код колбы:

@app.route("/object-detect-uploader", methods = ['GET', 'POST'])
def upload_object_detection():
    detect_objs = request.values['array'].split(",")

    d_array= [0 for i in range(6) ]
    for i in detect_objs:
        d_array[int(i)] = 1
    for upload in request.files.getlist("file"):
        filename = upload.filename
        # This is to verify files are supported
        ext = os.path.splitext(filename)[1]
        if (ext == ".jpg") or (ext == ".png"): #File extention check
            print("File supported moving on...")
            ans=(object_detection_module.object_detection(upload,d_array))
        else:
            render_template("Error.html", message="Files uploaded are not supported...")
    print("Rendering")
    return render_template("index.html", result = ans)

Index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    <br>
    <br>
<h1><center>Output</h1></center>
<br> 
<img src="data:image/png;base64,  {{result[0]}}" >
<br>
<br>
<h2> No of objects = {{ result[1] }}</h2> 

</body>
</html>

1 Ответ

0 голосов
/ 29 апреля 2019

Ajax-вызов - это асинхронный запрос, инициированный браузером, который не перезагружает страницу при получении ответа сервера.

IMO, так как вы хотите отобразить шаблон, выне следует использовать AJAX, просто используйте обычный элемент <form> или создайте форму программным способом, заполните данные, затем отправьте с jQuery('selector').submit().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...