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,并在其中添加一些调试,但我希望这里有人会发现一些在代码中做错的简单事情。