You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flask应用中向JavaScript传递JSON的技术问题

看起来你已经搭好了后端的路由框架,但前端还缺少发起请求并处理返回JSON的逻辑,我来帮你一步步搞定这个问题:

第一步:优化Flask路由(推荐)

你当前用json.dumps()返回数据,其实Flask自带的jsonify()方法更合适——它会自动设置正确的HTTP响应头(Content-Type: application/json),让前端解析JSON数据更顺畅:

from flask import jsonify  # 别忘了导入这个方法

@app.route('/getUser', methods=['GET'])
def getUser():
    main = Main()
    value = request.args.get('user_name')
    user = main.getValues(value)
    print(json.dumps(user))
    return jsonify(user)  # 替换原有的return语句
第二步:给模板添加JavaScript交互逻辑

你需要在模板中添加代码,监听按钮的点击事件,发起AJAX请求到/getUser路由,再把返回的JSON数据渲染到页面的label里。这里先给你原生JavaScript的实现(不需要依赖任何库):

把这段代码放在模板的</form>标签之后,或者页面底部的</body>标签之前:

<script>
// 获取页面上需要用到的元素
const searchBtn = document.getElementById('btn_pesquisar');
const userNameInput = document.getElementById('user_name');
const idLabel = document.getElementById('id');
// 如果还有其他要展示的字段(比如姓名、邮箱),同样用getElementById获取对应的label

// 监听按钮点击事件
searchBtn.addEventListener('click', async (e) => {
    e.preventDefault(); // 阻止表单默认的提交行为,避免页面刷新
    const userName = userNameInput.value.trim();
    
    // 先校验输入是否为空
    if (!userName) {
        alert('请输入用户名');
        return;
    }

    try {
        // 发起GET请求,带上user_name参数(用encodeURIComponent处理特殊字符)
        const response = await fetch(`/getUser?user_name=${encodeURIComponent(userName)}`);
        
        // 检查请求是否成功
        if (!response.ok) {
            throw new Error(`请求失败:${response.status}`);
        }

        // 解析返回的JSON数据
        const user = await response.json();
        
        // 将数据填充到对应的label中
        idLabel.textContent = `用户ID:${user.id}`;
        // 示例:如果还有姓名字段,就这么写
        // nameLabel.textContent = `姓名:${user.name}`;
    } catch (error) {
        // 捕获并处理错误
        console.error('获取用户数据出错:', error);
        alert('获取用户信息失败,请稍后重试');
    }
});
</script>
第三步:确保后端返回的user数据格式正确

要保证main.getValues(value)返回的user是一个可序列化为JSON的Python字典,比如类似这样的结构:

# 示例user字典结构
user = {
    'id': 123,
    'name': 'Matheus Alcântara',
    'email': 'example@domain.com'
}

这样前端才能正确解析并提取对应的字段。

可选:用jQuery实现(更简洁)

如果你习惯用jQuery,代码会更短,前提是你的页面已经引入了jQuery库:

$('#btn_pesquisar').click(function(e) {
    e.preventDefault();
    const userName = $('#user_name').val().trim();
    
    if (!userName) {
        alert('请输入用户名');
        return;
    }

    $.get('/getUser', { user_name: userName }, function(user) {
        $('#id').text(`用户ID:${user.id}`);
        // 其他字段同理,比如$('#name').text(`姓名:${user.name}`);
    }).fail(function(error) {
        console.error('获取用户数据出错:', error);
        alert('获取用户信息失败,请稍后重试');
    });
});

做完这些修改后,点击"Pesquisar"按钮,前端就会发送请求到后端获取用户的JSON数据,然后自动把数据显示到页面对应的label里啦。

内容的提问来源于stack exchange,提问作者Matheus Alcântara

火山引擎 最新活动