Datatables jquery动态设置ajax url参数

Datatables jquery动态设置ajax url参数,jquery,json,ajax,url,datatables,Jquery,Json,Ajax,Url,Datatables,我正在使用datatables并通过ajax从数据库检索数据: ... deferRender: true, ajax: { url: "/api/tracks/classical", dataSrc: '', contentType: "application/json" }, "columns": [ { "data"

我正在使用datatables并通过ajax从数据库检索数据:

        ...
        deferRender: true,
        ajax: {
            url: "/api/tracks/classical",
            dataSrc: '',
            contentType: "application/json"
        },
        "columns": [
            { "data": "Category" },
            { "data": "Title" },
         ...
选择菜单选项后,我希望更改url以读取不同的数据集并重新加载表格: 如 /api/tracks/经典版将成为 /api/曲目/声学

(这实际上是使用不同的参数调用相同的api。)

我尝试在单击菜单时设置新的url,调试时,我可以看到它确实调用了新的url,但随后立即再次调用旧的url,并重新绘制了相同的表

 $('#menu-t-acoustic').click(function () {
       $('#mytable').ajax.url('/api/tracks/acoustic').load();
 });
那么如何使用jquery/json/datatables实现这一点呢

我认为url

    ajax: {
        url: "/api/tracks/classical"
应该能够使用变量而不是硬编码字符串,但我不知道任何语法来做到这一点-有可能吗


所以。。。如何动态设置ajax url?如何让datatables使用新url重新加载?

尝试调用
datatables
返回的实例变量
load
。 差不多

var yourdatatable = $('#mytable').DataTable( {
                     ....
                     ajax: {
                      url: "/api/tracks/classical",
                      dataSrc: '',
                      contentType: "application/json"
                     },
                     ....
                    });

yourdatatable.ajax.url('/api/tracks/acoustic').load();
来自文档的示例

var table = $('#example').DataTable( {
    ajax: "data.json"
} );

table.ajax.url( 'newData.json' ).load();

为了实现动态呈现,您可以使用变量(即
var-apiToQuery
),然后将变量添加到api url的末尾:

$('.yourMenuButtons').click(function () {
    var apiToQuery = $(this).val();
    $('#mytable').ajax.url('/api/tracks/' + apiToQuery).load();
});
但是,要回答您关于渲染默认ajax调用的问题,是否需要硬编码?我认为您可以将ajax调用从初始表代码中删除,然后在单独的事件处理程序中执行:

$('document').ready(function() {
    $('#mytable').ajax.url('/api/tracks/defaultApiQuery').load();
}

创建数据表时,将其分配给变量:

var datatable;

$(document).ready(function () {
    datatable = $("#table").DataTable({
        ...
    });
});

function filterResults(filter) {
    datatable.ajax.url('/api/tracks/' + filter).load();
}
DataTables将很好地附加自己的参数。祝你好运

很晚了,但我认为这可以帮助其他人