我正在尝试从Ajax中获取Flask中的变量。这个想法是从HTML的下拉列表中选择一个值,然后使用Ajax将其ID传递给Flask。该选项的ID实际上是我要从Flask导入的变量名称。
例如:
1->我在下拉菜单中选择第一个选项,其ID为'column_a';
2->在Ajax(从选定选项中提取的ID)中,我使用变量'labels_x';传递给Flask;
3->在Flask中,我使用相同的变量名'labels_x'从Ajax接收数据;
4->问题来了:根据通过'request.args.get()'收到的数据,我应该在Flask('column_a')中拾取全局变量。也是“ column_a” 。但是我做不到。我得到的只是一个字符串'column_a'。不是我想要的全局变量中存储的列表值。
我在这里做什么错了?
<select name="select_label_1" id="select_label_1" class="custom-select select_label">
<option value="{{ column_a }}" id='{{ column_a }}'>{{ label_a }}</option>
<option value="{{ column_b }}" id='{{ column_b }}'>{{ label_b }}</option>
<option value="{{ column_c }}" id='{{ column_c }}'>{{ label_c }}</option>
</select>
labels_x_selected = $("#select_label_1").children(":selected").attr("id") || 0;
// AJAX FOR LABELS
// ################
$.ajax({
url: "/home/data_analysis_labels",
type: "GET",
data: {labels_x: labels_x_selected},
success: function(data) {
$("#labels___").html(data);
},
error: function(xhr) {
alert('error - must try again and handle it');
}
});
@blueprint.route('/data_analysis_labels', methods=['GET', 'POST'])
@login_required
def data_analysis_labels():
global column_a
global column_b
global column_c
labels_x = request.args.get('labels_x', default='nothing received', type=str)
return jsonify(labels_x)
答案 0 :(得分:0)
一种可能性是创建如下所示的多个If条件。因为我现在有一百个变量,所以听起来不易读且不容易。
if labels_x == 'column_a':
labels_x = column_a
else: labels_x = 'nothing received 2'
然后我获得了全局变量值,而不是简单的字符串。