You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中执行Python函数后自动运行JS加载HTML到iframe的实现方法

单按钮实现流程方案

核心逻辑是通过异步请求(AJAX)提交参数,后端处理完成返回成功信号后,直接触发创建iframe加载表格的逻辑,无需二次点击。

1. 前端代码修改

把原来的两个按钮合并为一个,取消表单默认提交行为,用AJAX传递参数:

<br />
<!-- 合并后的单个按钮,绑定点击事件 -->
<input type='button' value='提交查询' class="savebtn" name='Submit' onclick="handleSubmit()" />

...

<!-- 如果项目已有jQuery可省略这行 -->
<script src="https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js"></script>
<script>
function handleSubmit() {
    // 1. 收集页面文本框的参数,替换为你实际的文本框ID
    const queryParam = $('#input_text_id').val();
    
    // 2. 异步提交参数到后端接口
    $.post('/generate_table', {query_param: queryParam}, function(res) {
        // 3. 后端返回成功后,创建iframe加载生成的表格
        $('iframe').remove(); // 先清除旧的iframe
        const iframe = document.createElement('iframe');
        // 加时间戳防止加载缓存的旧表格文件
        iframe.src = '/static/Table.html?t=' + new Date().getTime();
        iframe.height = "500";
        iframe.width = "100%";
        document.body.appendChild(iframe);
    })
}
</script>

2. Flask后端代码修改

原来的生成逻辑接口调整为接受POST请求,处理完成后返回JSON响应:

from flask import Flask, request, jsonify, render_template
import os

# 配置静态资源目录,生成的Table.html存在该目录下可直接访问
app = Flask(__name__, static_folder='static')

@app.route('/generate_table', methods=['POST'])
def generate_table():
    # 获取前端传递的查询参数
    query_param = request.form.get('query_param')
    # 此处替换为你实际的数据库查询逻辑
    query_result = your_db_query_func(query_param)
    
    # 渲染带表格的HTML模板,写入到静态目录下
    table_html = render_template('table_template.html', data=query_result)
    with open(os.path.join('static', 'Table.html'), 'w', encoding='utf-8') as f:
        f.write(table_html)
    
    # 返回成功响应给前端
    return jsonify(code=200, msg="生成成功")

注意事项

  • 若多个用户同时使用该功能,建议给每个生成的HTML文件加唯一标识(比如用户ID+时间戳命名),避免不同用户的查询结果互相覆盖
  • 如果查询生成耗时较长,可以在触发AJAX请求前加个"正在生成..."的加载提示,请求返回后再隐藏,提升使用体验
  • 生成的HTML文件需存储在Flask配置的静态资源路径下,否则iframe会出现加载失败的问题

内容的提问来源于stack exchange,提问作者coderKeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:24:03