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

Python/Flask+JavaScript/AJAX实现REST通信时PUT请求参数无法传递的问题求助

Python/Flask+JavaScript/AJAX实现REST通信时PUT请求参数无法传递的问题求助

我有一个Web应用,通过REST服务从数据库获取数据,最终生成表格形式的输出:

(表格输出示例:每行包含数据内容以及Collect和Archive两个操作按钮)

如你所见,表格的每一行都有两个按钮(Collect/Archive),用户点击后可以通过另一个REST服务更新数据库,该服务接受HTML PUT请求。

按钮的点击动作是用JavaScript实现的,点击按钮时会执行以下代码:

function updateSourceState(sourceTypeId, sourceId, dataForUpdate) {
    $.ajax({
            url: '/update',
            data: {source_type_id: sourceTypeId, source_id: sourceId, data_for_update: dataForUpdate},
            dataType: 'json',
            type: 'PUT',
            success: function (data) {
                console.log('Data updated successfully');
            },
            error: function(data) {
                console.log('Data update failed. Response: ' + data);
            }
        }).done(function() {
            console.log('DONE: data updated successfully');
        }).fail(function(msg) {
            console.log('FAIL: data update failed: ' + msg);
        }).always(function(msg) {
            console.log('ALWAYS message: ' + dataForUpdate + ', url: ' + url);
        });
}

我用Python-Flask和JavaScript实现了与REST服务的通信,主程序(WebViewer.py)定义的路由如下:

@bp.route('/update', methods=['PUT'])
def update_source_state():
    app.logger.debug('[DEBUG] entering update_source_state()')

    source_id = request.args.get('source_id')
    source_type = request.args.get('source_type_id')
    dataForUpdate = request.args.get('data_for_update')

    url = '{0}/{1}/source/{2}'.format(ARCHIVE_CONFIG_BASE_URL, source_type, source_id)
    response = requests.put( url=url
                            , data=dataForUpdate
                            , headers={'Content-Type': 'application/json', 'accept': 'application/json'}
                            )

    if response.status_code == 200:
        return jsonify({'status': 'success'}), 200
    elif response.status_code == 405:
        return jsonify({'status': 'method not allowed'}), 405
    elif response.status_code == 500:
        return jsonify({'status': 'server error'}), 500
    else:
        return jsonify({'status': 'failed'}), 600

我在浏览器调试器里看到JavaScript的updateSourceState()函数被调用,且变量都已正确赋值,但在Flask的update_source_state()方法中,request.args获取到的所有参数都是None,看起来参数没有从JavaScript传递到Flask/Python端。

请问在这个场景下,执行PUT请求的正确语法是什么?非常感谢任何帮助!

备注:内容来源于stack exchange,提问作者WolfiG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:13:04