1

JQuery 数据表在我们的 Web 应用程序中被广泛使用,通常它们不会产生问题。但是有一个有这个错误的地方,在执行 fnReloadAjax 期间,它给出了错误“TypeError: k is undefined”,它来自 dataTables.js 行,其中“fnServerData:function(e,j,m,k) “出现。这是数据表定义:

    url = '?p=user.creation_rules_browser&page_action=getData';
data_table = jQuery('#data').dataTable({
    bJQueryUI: true,
    sDom: '<"template-box"fl><"template-box"ip><"template-box"r><"ui-widget ui-widget-content ui-helper-clearfix ui-corner-all template-box" t><"template-box"p<"toolbar">>',
    sAjaxSource: url,
    bPaginate: false,
    bProcessing: true,
    bAutoWidth: false,
    bSort:false,
    bFilter:false,
    bInfo:false,
    aoColumns: [
                { "bSortable": false },
                { "bSortable": false },
                { "bSortable": false },
                { "bSortable": false },
                { "bSortable": false },
                { "bSortable": false },
                { "bSortable": false }
            ]
    } );

它可以完美加载,但是有一列带有操作菜单,可让您编辑该行。这会弹出一个 jQuery 对话框,当您点击“保存”时会执行以下操作:

jQuery.getJSON('index.php',{
    p: "user.creation_rules_browser",
    page_action: "edit_rule",
    rule_name: rule_name_val,
    target_field: $('#input_target_field').val(),
    action_value: action_value_val,
    action_set_to_blank: action_set_to_blank_val,
    id: data.id
}, function (json) { 
    if (json.error) {
        Dialog.alert({title: "Error Saving Rule"}, json.error);
    } else {
        jQuery(self).dialog('close');
        url = 'index.php?p=user.creation_rules_browser&page_action=getData';
        data_table.fnReloadAjax(url);
    }
}

Save 确实有效,但由于该错误,dataTable 没有重新加载。它应该回到那个 url 和“getData”并重新加载,但它卡在 fnServerData 中,因为 k 是未定义的。这个 k 对应于非最小 fnServerData 声明中的 oSettings,但我已经完成了一个 console.log 并验证了 fnGetSettings 返回了 oSettings 的预期副本。最初,在对 fnReloadAjax 的调用中没有传递 url,所以我认为这可能是一个问题并添加了它,但得到了相同的结果。

所以我不明白为什么它是未定义的。我想我的下一步是使用非最低版本的 dataTables.js,并在其中添加一些调试,但我希望这里有人会发现一些在代码中做错的简单事情。

4

1 回答 1

1

没关系,我发现除了当前版本之外,还加载了过时版本的 dataTables 和 fnReloadAjax。把它拿出来修复它。

于 2013-09-24T20:56:11.040 回答