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

Flask动态表格数据提交问题求助:jQuery新手遇数据异常

动态表格表单提交异常的原因与解决方案

错误原因

你遇到的{"":"20"}异常,核心问题是动态表格里的所有<input>都没有设置name属性。

在提交逻辑中,代码通过row[this.name] = this.value收集数据,但因为input没有name,this.name的值是空字符串。当同一行的两个input都使用空字符串作为键时,后一个输入值会覆盖前一个,最终就出现了只保留第二个输入值、键为空的异常数据。

解决方案

要解决这个问题,需要给每个动态输入框添加明确的name属性,并同步修改添加行的逻辑,最后优化数据收集方式:

1. 修改静态HTML中的输入框

给表格里的静态input添加name,分别对应菜品名称和价格:

<tr class="p-2">
    <td><input type="text" name="menu_item"></td>
    <td><input type="text" name="menu_price"></td>
</tr>

2. 更新添加行的JS代码

确保动态新增的行里,input也带有对应的name属性:

$("#add_rows").click(function () {
    $("#data_container tbody").append(`<tr><td><input type="text" name="menu_item"></td><td><input type="text" name="menu_price"></td></tr>`);
});

3. 优化提交逻辑

修改submitForm函数,让数据结构更清晰,同时可以过滤空行(可选):

const weburl = "/owner-new-cafe";
document.getElementById('submit-btn').addEventListener('click', function (event) {
    event.preventDefault();
    submitForm();
});

function submitForm() {
    // 收集静态表单数据
    const formData = new FormData(document.getElementById('my-form'));

    // 收集动态表格数据
    const dynamicData = [];
    $('#dynamic-fields tbody tr').each(function () {
        const row = {};
        // 获取当前行的两个输入框
        const itemInput = $(this).find('input[name="menu_item"]')[0];
        const priceInput = $(this).find('input[name="menu_price"]')[0];
        
        // 可选:过滤掉两个输入都为空的行
        if (itemInput.value.trim() || priceInput.value.trim()) {
            row.menu_item = itemInput.value.trim();
            row.menu_price = priceInput.value.trim();
            dynamicData.push(row);
        }
    });

    // 将动态数据转为JSON字符串,添加到FormData中
    formData.append('dynamicData', JSON.stringify(dynamicData));

    // 发送AJAX请求
    $.ajax({
        url: weburl,
        method: 'POST',
        data: formData,
        processData: false,
        contentType: false,
        success: function (response) {
            console.log("提交成功", response);
            // 这里可以添加成功后的操作,比如清空表格、跳转页面等
        },
        error: function (xhr) {
            console.error("提交失败", xhr.responseText);
        }
    });
}

4. Flask后端处理示例

后端可以通过解析JSON字符串获取动态表格数据:

from flask import Flask, request, jsonify
import json

app = Flask(__name__)

@app.route('/owner-new-cafe', methods=['POST'])
def owner_new_cafe():
    # 获取静态表单中的咖啡馆名称
    cafe_name = request.form.get('name')
    
    # 获取动态表格数据并解析
    dynamic_data_str = request.form.get('dynamicData')
    dynamic_data = []
    if dynamic_data_str:
        try:
            dynamic_data = json.loads(dynamic_data_str)
            # 这里可以将数据存入数据库,比如:
            # for item in dynamic_data:
            #     db.session.add(MenuItem(name=item['menu_item'], price=item['menu_price']))
            # db.session.commit()
        except json.JSONDecodeError:
            return jsonify({"status": "error", "message": "无效的动态数据格式"})
    
    return jsonify({"status": "success", "cafe_name": cafe_name, "menu_items": dynamic_data})

if __name__ == '__main__':
    app.run(debug=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:00:42