Javascript 尝试在ajax外部访问dataTable变量会导致未定义错误
我有一个jquery自动完成功能,一旦选择了一个值,它就会从ajax调用加载一个带有复选框的数据表。然后,在提交表单时,我需要访问datatable变量来迭代每一行以获得所选的行,但是datatable变量显示为未定义 我的操作与示例中的相同,唯一的区别是数据来自Ajax请求 你能帮我理解为什么会这样吗 $document.readyfunction{ 坎皮德变种; var t_OmnitureCode; //活动输入自动完成 $campaign.autocomplete{ 来源:functionrequest,response{ $.ajax{ 网址:推广, 类型:GET, 数据:{ 期限:request.term, 行动:搜索运动 }, 数据类型:json, 成功:functiondata{ if!data.length{ var结果=[{ 标签:未找到匹配项, 值:-1 }]; 应答结果; }否则{ 响应$.mapdata,functionitem{ 返回{ 标签:item.name, 值:item.campaid } }; } } }; }, 选择:functionevent,ui{ 违约事件; campId=ui.item.value; 如果campId!=-1{ this.value=ui.item.label; //这将应用从Ajax调用获取内容的数据表 t_OmnitureCode=applyDataTableOmnitureCodecampId; } }, 焦点:functionevent,ui{ 违约事件; this.value=ui.item.label; } }; //处理表格提交 $frm_promotion.onsubmit,functione{ var form=此; //下面未定义datatable t_OmnitureCode的变量 var rows_selected=t_OmnitureCode.column0.checkbox.selected; 编辑: 刚刚意识到,即使在分配变量t_OmnitureCode=applyDataTableOmnitureCodecampId时,它仍然是未定义的,不知道为什么 以下是applyDataTableOmnitureCode代码:Javascript 尝试在ajax外部访问dataTable变量会导致未定义错误,javascript,jquery,ajax,datatables,Javascript,Jquery,Ajax,Datatables,我有一个jquery自动完成功能,一旦选择了一个值,它就会从ajax调用加载一个带有复选框的数据表。然后,在提交表单时,我需要访问datatable变量来迭代每一行以获得所选的行,但是datatable变量显示为未定义 我的操作与示例中的相同,唯一的区别是数据来自Ajax请求 你能帮我理解为什么会这样吗 $document.readyfunction{ 坎皮德变种; var t_OmnitureCode; //活动输入自动完成 $campaign.autocomplete{ 来源:functio
function applyDataTableOmnitureCode(campId) {
$("#tbl_omnitureCode").DataTable({
destroy: true,
scrollX: true,
fixedColumns: {
leftColumns: 1
},
"ajax": {
"url": "promotion",
"type": "GET",
"data": {
action: "searchOmnitureCodesByCampaignId",
campaignId: campId
},
"dataSrc": ""
},
"columns": [
{ "data": "key" },
{ "data": "omnitureCode" },
{ "data": "urlAppName" },
{ "data": "language" },
{ "data": "channel" },
{ "data": "createDateTime", "defaultContent": "" },
{ "data": "updateDateTime", "defaultContent": "" }
],
"columnDefs": [
{ "targets": 0, "checkboxes": { "selectRow": true } }
],
"select": {
"style": "multi"
},
"order": [[1, "asc"]],
"fnInitComplete": function() {
$("#omnitureCodeSection").show();
}
});
};
这是一个范围问题:在$document.ready函数中声明变量表。 您可能希望将其置于全局范围之外: var表 $document.readyfunction{ table=$'example'.DataTable{ ...
};在使用DataTables对象之前,您可能需要将DataTables对象捕获到一个变量中:
var t_OmnitureCode = $("#tbl_omnitureCode").DataTable();
var rows_selected = t_OmnitureCode.column(0).checkboxes.selected();
顺便说一句,使用外部ajax调用填充DataTable的方法是次优的。有一个选项可以用于此目的,您可以指定所有必要的参数,更好地与DataTables API集成,并获得更好的性能,因为您不需要在每次刷新时销毁和创建DataTable
您只需在需要刷新表数据时触发即可。我也尝试过,但没有成功。在那里,应该可以,因为变量可用于处理表单提交部分。很抱歉,如果我没有得到您需要的信息,ApplyDataTableOmnitureCode不会返回任何内容…@KevinB您完全正确,big我没有看到的错误。谢谢你抓住了这个机会。这是当之无愧的否决票。@KevinB请回答,这样我就可以给你我正在做的销毁:因为无法重新初始化datatable错误,所以我按照中的建议做了:https://stackoverflow.com/questions/24545792/cannot-reinitialise-datatable-dynamic-data-for-datatableAnd 就是一个非常糟糕的建议,而不是将文章的OP指向根本原因使用外部ajax调用填充数据表,而不是使用本机选项ajax。建议的解决方法可以消除后果,而不是根本原因,使用API方法会损害应用程序性能,并导致与您类似的进一步问题。没有工作ries:这是当之无愧的。现在解决我问题的是KevinB的评论,如果他没有给出答案,我不能将其标记为答案。如果你的意思是你已经将.DataTable输出分配给变量,并将其返回到applyDataTableOmnitureCodecampId主体中,那么自从你在每次需要使用该变量时,都要创建表,而不是像我上面建议的那样使用本机getter,并且只要在ajax调用成功时调用函数即可。