Javascript 将带有子变量的变量从JQuery传递到Flask app
我有一个烧瓶,它使用WTForms和Jquery从表单中的用户“输入”字段中获取信息,并向用户显示“选择”字段。Jquery用于根据用户在输入字段中输入的内容筛选显示给用户的选择字段。为了过滤select字段,我需要获取用户在输入字段中输入的内容并将其发送到Flask应用程序 这些是表单字段-Javascript 将带有子变量的变量从JQuery传递到Flask app,javascript,python,jquery,flask,wtforms,Javascript,Python,Jquery,Flask,Wtforms,我有一个烧瓶,它使用WTForms和Jquery从表单中的用户“输入”字段中获取信息,并向用户显示“选择”字段。Jquery用于根据用户在输入字段中输入的内容筛选显示给用户的选择字段。为了过滤select字段,我需要获取用户在输入字段中输入的内容并将其发送到Flask应用程序 这些是表单字段- class TableName(FlaskForm): schema = StringField('Schema', validators=[DataRequired()], id = 'sche
class TableName(FlaskForm):
schema = StringField('Schema', validators=[DataRequired()], id = 'schema_name')
table = StringField('Table', validators=[DataRequired()], id = 'table_name')
class QaForm(FlaskForm):
test_table_in = FormField(TableName, id = 'test_table')
prod_table_in = FormField(TableName, id = 'prod_table')
这是JQuery-
$(function() {
var tables = {
test_table: $('test_table_in-schema_name').val() + "." + $('test_table_in-table_name').val(),
prod_table: $('prod_table_in-schema_name').val() + "." + $('prod_table_in-table_name').val()
};
var fields = {
test: [$('#select_test_join_key'), $('#select_test_dimensions')],
prod: [$('#select_prod_join_key'), $('#select_prod_dimensions')]
};
fields.test.forEach(item => updateFields(tables.test_table, item));
fields.prod.forEach(item => updateFields(tables.prod_table, item));
function updateFields(table, field) {
var send = {
table: tables.table
};
$.getJSON("{{url_for('_get_fields') }}", send, function(data) {
//do something
});
}
});
当用户输入“test_table”时,测试表应传递给_get_fields(),当用户输入prod_table时,该值应发送给_get_fields()。Test_table和prod_table是两个表单字段,每个字段由两个子字段“schema”和“table”组成,它们组合在一起以“schema.table”格式创建一个字段
在Flask视图中使用函数_get_fields()来接收表名-
@app.route('/_get_fields/')
def _get_fields():
table = request.args.get('table', type=str)
fields_query = f"""select column_name AS Fields from information_schema.columns WHERE
table_name = '{table}' group by 1 limit 10;"""
conn.execute(fields_query)
result = conn.fetchall()
return jsonify(result)
潜在错误:
我认为Flask视图中的request_args.get()函数没有正确引用JQuery变量。我试过“test_table”、“prod_table”和其他方法,但到目前为止没有一种有效。我使用输入表单元素的“名称”来创建表变量——我想知道这是否也是问题的一部分。有什么想法或建议吗?您没有收到错误消息吗?您在
def\u get\u fields()
中有错误的缩进,您应该会收到错误消息。您是否检查了web浏览器DevTools中JavaScript控制台中是否有错误消息?可能使用log.console()
来显示变量中的内容,因为您似乎使用了错误的变量。也许你应该使用table:table
而不是table:tables。table
@furas对不起,这是我在复制代码时的错误,但实际代码没有这个错误。也修复了上面的问题。@furas,我确实收到一个错误,说“未捕获类型错误:tables.test_table.on不是函数”。然而,当我在Flask方法_get_fields()中硬编码“table”的值时,它工作得很好。所以我不确定它为什么不能识别表。一旦我更改了传递给Flask方法的内容,就立即测试表。我不明白你说什么。在浏览器或烧瓶中,哪里会出现错误?JavaScript对象和Flask对象是不同的对象。而Flask将所有内容都作为字符串获取,而不是作为具有函数的对象。