通过ajax加载的jquery datatable未注册为jquery插件

通过ajax加载的jquery datatable未注册为jquery插件,jquery,datatables,jquery-datatables,Jquery,Datatables,Jquery Datatables,我正在通过jQueryAjax加载一些HTML,作为响应的一部分,有一个对jQueryDataTables的脚本引用。我看到脚本加载很好,但是插件没有在jQuery中注册(这是初始页面加载的一部分)。因此,当我调用$(container).DataTable(…)时,它表示函数未定义。同样的代码在datatable正常加载时工作,而不是通过ajax。出于某种原因,动态加载它会导致此故障。任何指向可能导致该问题的原因的指针?问题在于,当内容注入页面时,标记不会执行,请参阅 最简单的方法是在主页中包

我正在通过jQueryAjax加载一些HTML,作为响应的一部分,有一个对jQueryDataTables的脚本引用。我看到脚本加载很好,但是插件没有在jQuery中注册(这是初始页面加载的一部分)。因此,当我调用$(container).DataTable(…)时,它表示函数未定义。同样的代码在datatable正常加载时工作,而不是通过ajax。出于某种原因,动态加载它会导致此故障。任何指向可能导致该问题的原因的指针?

问题在于,当内容注入页面时,
标记不会执行,请参阅

最简单的方法是在主页中包含DataTables CSS/JS文件,并将其从AJAX内容中删除。我已经排除了jQuery,因为您已经提到它已经是主页的一部分了

<!-- DataTables CSS -->
<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.6/css/jquery.dataTables.css">  

<!-- DataTables -->
<script type="text/javascript" charset="utf8" src="//cdn.datatables.net/1.10.6/js/jquery.dataTables.js"></script>

另一个选项是动态加载数据表,如下所示。然而,您需要使用一些页面标识机制来通过页面ID确定它是否需要DataTables库。此外,如果您需要数据表之外的其他库,那么下面的脚本将更加复杂

$.ajax("/path/to/script.php")
    .done(function(){
        $('head').append(
            $('<link rel="stylesheet" type="text/css" />')
                .attr('href', '//cdn.datatables.net/1.10.6/css/jquery.dataTables.css') 
        );

        $.ajax(
            url: '//cdn.datatables.net/1.10.6/js/jquery.dataTables.js', 
            cache: true,
            dataType: 'script'
        ).done(function(){
           // DataTables initialization
        });
    });
$.ajax(“/path/to/script.php”)
.done(函数(){
$('head')。追加(
$('')
.attr('href','//cdn.datatables.net/1.10.6/css/jquery.datatables.css')
);
$.ajax(
url:“//cdn.datatables.net/1.10.6/js/jquery.datatables.js”,
是的,
数据类型:“脚本”
).done(函数(){
//数据表初始化
});
});

这应该没问题,除非AJAX调用实际删除了最初加载的脚本。可能是这样吗?不,我想不是这样的。jQuery引用仍然可以很好地解析,即jQuery和$都已定义。但正如我上面提到的,即使定义了jQuery,dataTables也不会注册自身,并且继续未定义