Javascript 数据库服务器端ajax POST';错误';:&引用;int()参数必须是字符串、类似字节的对象或数字,而不是';非类型'&引用;

Javascript 数据库服务器端ajax POST';错误';:&引用;int()参数必须是字符串、类似字节的对象或数字,而不是';非类型'&引用;,javascript,python,datatables,Javascript,Python,Datatables,现在,当我尝试获取数据并在使用服务器端的datatables上显示时,出现了一些错误 在下面的代码之后,我使用AJAXPOST方法获取了数据,因为我想发送一些需要用于在数据库中过滤的数据,这是我的代码 Javascript report_table = $('#report_table').DataTable({ "scrollX": true, "serverSide":true,

现在,当我尝试获取数据并在使用服务器端的datatables上显示时,出现了一些错误

在下面的代码之后,我使用AJAXPOST方法获取了数据,因为我想发送一些需要用于在数据库中过滤的数据,这是我的代码

Javascript

report_table = $('#report_table').DataTable({
            "scrollX": true,
            "serverSide":true,
            "deferRender": true,
            "ajax": {
                "url": "load_report_table",
                "type": "POST",
                "data":{
                    'region_id': function() { return $('#select_reg').val() },
                }
            },
});
蟒蛇

from datatables import ColumnDT, DataTables
from flask import request
@app.route('/load_report_table', methods=['POST', 'GET'])
def load_report_table(): 
    reg_id = request.form['region_id']
    columns = [
        ColumnDT(Battery_Log.time),
        ColumnDT(Battery.serial_number),
        ColumnDT(Battery_Log.usage),

    ]
    query = db.session.query().select_from(Battery, Battery_Log)\
            .filter(Battery.reg_id == reg_id, Battery_Log.battery_id == Battery.id)

    params = request.args.to_dict()
    rowTable = DataTables(params, query, columns)

    return rowTable.output_result()

但是当我打印
rowTable.output_result()
时,它得到了如下错误

{'draw': '1', 'recordsTotal': '14733', 'recordsFiltered': '14733', 'error': "int() argument must be a string, a bytes-like object or a number, not 'NoneType'"}
现在,我猜使用
POST
方法会导致错误,因为当我将代码更改为仅调用url,而不将任何数据发布到route函数时,它会正常工作,代码如下所示

report_table = $('#report_table').DataTable({
            "scrollX": true,
            "serverSide":true,
            "deferRender": true,
            "ajax": "load_report_table"
});

因此,我可以将数据发布到路由函数并返回数据表上显示的数据。您的方法(使用函数作为
数据
选项)是正确的,但语法不正确。你可以看到几个例子。所有内容都需要放在函数中(包括
'region\u id'
)。另外,请记住同一链接中关于不要覆盖服务器端响应数据的警告。@andrewjames感谢您的响应,我尝试了这个
“数据”:function(){return{'region\u id':function(){return$('select\u reg').val()};
和这个
“数据”:function(d){return extend$.extend({},d,{'region\u id':function(){return$('#select_reg').val()}})
但是它仍然得到了相同的错误T-TRight-因为这些都不是有效的语法。您的JavaScript对象
{}
中有一个函数。您不需要它。您只需要
$('#select_reg').val()的值
。为什么要将其包装在函数中?@andrewjames,因为我希望在重新加载数据表时它是当前值,现在我已经将它更改为
$('#select_reg').val()
,甚至我将它设置为静态值,如1,但它仍然不工作,因为现在我想知道可能是
sqlalchemy数据表
(后端)这不适用于POST方法,因为我也尝试了不向flask发送任何数据,但它仍然不起作用。如果我的观点不清楚,很抱歉。您只需要一个函数
“data”:function(){…}
。在该函数中,您可以编写构建
{…}所需的任何(有效!)JavaScript
您需要的对象。您不需要第二个函数来完成此操作。因为您正在为
数据
选项使用一个函数,所以每次重新执行DataTable的ajax调用时(例如,通过使用)。