Javascript 将带有子变量的变量从JQuery传递到Flask app

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

我有一个烧瓶,它使用WTForms和Jquery从表单中的用户“输入”字段中获取信息,并向用户显示“选择”字段。Jquery用于根据用户在输入字段中输入的内容筛选显示给用户的选择字段。为了过滤select字段,我需要获取用户在输入字段中输入的内容并将其发送到Flask应用程序

这些是表单字段-

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将所有内容都作为字符串获取,而不是作为具有函数的对象。