Javascript 如何在Flask应用程序中将流文件内容作为json结构传递给AJAX
我有下面的Flask应用程序,它基本上只是一个表单,您可以上传一个文件,从几个选项单选按钮中进行选择,后端的python脚本处理上传的文件以生成HTML 目前,我正在通过将上传的文件读取到内存而不是将其保存在本地来流式传输,因为我将把这个应用程序部署到只读文件系统。我通过csv.DictReader将这个流文件处理到字典中。。。然后将其转换为JSON对象。然后,我想将这个JSON对象传递给index.html中的AJAX函数,以便我的后端python脚本可以处理JSON文件,而不是本地保存的文件 问:将JSON结构传递给AJAX的正确方法是什么,然后在AJAX端,如何将JSON对象传递回我的下一个Flask route upload\u vals,在这里我启动python脚本 main.py index.htmlJavascript 如何在Flask应用程序中将流文件内容作为json结构传递给AJAX,javascript,python,jquery,ajax,flask,Javascript,Python,Jquery,Ajax,Flask,我有下面的Flask应用程序,它基本上只是一个表单,您可以上传一个文件,从几个选项单选按钮中进行选择,后端的python脚本处理上传的文件以生成HTML 目前,我正在通过将上传的文件读取到内存而不是将其保存在本地来流式传输,因为我将把这个应用程序部署到只读文件系统。我通过csv.DictReader将这个流文件处理到字典中。。。然后将其转换为JSON对象。然后,我想将这个JSON对象传递给index.html中的AJAX函数,以便我的后端python脚本可以处理JSON文件,而不是本地保存的文件
@app.route('/process_file', methods=['POST'])
def process_file():
# Run checks on the file
if 'file' not in flask.request.files or not flask.request.files['file'].filename:
return flask.jsonify({'result':'False', 'message':'no files selected'})
return flask.redirect(url_for('home'))
file = flask.request.files['file']
filename = secure_filename(file.filename)
if not allowed_file(file.filename):
return flask.jsonify({'result':'False', 'message':'Must be TXT file!'})
return flask.redirect(url_for('home'))
# Convert streamed file contents to json object
contents_dict = csv.DictReader(file, delimiter='\t')
data = []
for line in contents_dict:
data.append(line)
json_data = json.dumps(data)
# Stream file and check that places exist
contents = csv.reader(file, delimiter='\t')
if not places_exist(contents):
return flask.jsonify({'result':'False', 'message':'There is an affiliation missing from your Place list. Please re-try.'})
return flask.redirect(url_for('home'))
flask.session['filename'] = filename
return flask.jsonify({'result':'True'})
return json_data # is this right?
<script>
$(document).ready(function(){
$('#TheForm').on('click', '.submit_data', function(){
var form_data = new FormData($('#myform')[0]);
var flag = true;
$.ajax({
type: 'POST',
url: '/process_file',
data: form_data,
contentType: false,
cache: false,
processData: false,
success: function(data) {
if (data.result === 'False'){
$('.error_message').html(data.message)
flag = false;
}
else {
var payload = {};
$('.form-radio').each(function(){
if ($(this).prop('checked')){
payload[$(this).data('key')] = $(this).data('value');
}
});
$.ajax({
url: "/upload_vals",
type: "get",
data: {'payload':JSON.stringify(payload)},
success: function(response) {
$(".my-results").html(response.data);
},
});
}
},
});
});
});
</script>