Javascript DataTables.js的CDN回退
我正试图为Javascript DataTables.js的CDN回退,javascript,jquery,datatables,cdn,fallback,Javascript,Jquery,Datatables,Cdn,Fallback,我正试图为datatables.min.js编写一个CDN后备方案——不知为什么,我在Google或datatables.net上找不到任何后备方案。在阅读了这个和这个之后,我想出了这个不成功的作品(甚至尝试了各种表达方式,如图所示): 2/。。。但不知怎的,我从中获得了功能(很好): <script src="~/scripts/datatables.min.js"></script> <script> alert(typeof jQuery.fn.
datatables.min.js
编写一个CDN后备方案——不知为什么,我在Google或datatables.net上找不到任何后备方案。在阅读了这个和这个之后,我想出了这个不成功的作品(甚至尝试了各种表达方式,如图所示):
2/。。。但不知怎的,我从中获得了功能(很好):
<script src="~/scripts/datatables.min.js"></script>
<script>
alert(typeof jQuery.fn.dataTable);
</script>
警报(jQuery.fn.dataTable的类型);
这在我看来是一样的,特别是因为document.write
使用同步加载。我还尝试了纯DOM方法,但没有成功
我在文档中缺少了什么。编写?
试试这个
<script>
if (typeof jQuery.fn.dataTable === 'undefined') {
$.getScript(baseURL + '/scripts/datatables.min.js?' + Math.random(), function () {
//do stuff here
alert(typeof jQuery.fn.dataTable);
});
}
</script>
if(typeof jQuery.fn.dataTable===‘未定义’){
$.getScript(baseURL+'/scripts/datatables.min.js?'+Math.random(),函数(){
//在这里做事
警报(jQuery.fn.dataTable的类型);
});
}
在您的代码文档中。写入和警报将同时处理,请注意,警报将在“database.min.js”可用时完成
使用$(document).ready()或winidow.onload,您将看到预期的结果
不过,在进行此操作之前,请阅读这里的最佳实践、优点和缺点-
我将推荐使用RequireJS来高效地完成这项工作,正如Scott Hanselman所描述的,在尝试使用它之前,请先浏览下面的链接,因为他详细讨论了CDN回退,并涵盖了它的各个方面-
希望它能帮助您找到正确的方向,并为您提供坚实的基础。针对DataTables的正确CDN回退方法如下:
<script>
if (typeof jQuery.fn.dataTable === 'undefined') {
document.write('\x3Cscript src="/scripts/datatables.min.js"\x3E\x3C/script\x3E');
//document.write('<script src="/scripts/datatables.min.js"><\/script>');
}
</script>
if(typeof jQuery.fn.dataTable===‘未定义’){
document.write('\x3Cscript src=“/scripts/datatables.min.js”\x3E\x3C/script\x3E');
//文件。写(“”);
}
或者干脆
<script>window.jQuery.fn.dataTable || document.write('\x3Cscript src="/scripts/datatables.min.js"\x3E\x3C/script\x3E')</script>
window.jQuery.fn.dataTable | | document.write('\x3Cscript src=“/scripts/datatables.min.js”\x3E\x3C/script\x3E')
正如@ParthTrivedi所建议的那样,src=”“
中的tilda/相对路径是问题所在(参见注释)。根据这一点,“在脚本中时,路径相对于显示的页面””您将在文档中的脚本中插入脚本
使用$.getScript('~/scripts/datatables.min.js?'+Math.random(),function(){})
动态加载脚本。document.write
方法已被广泛使用和推荐-例如,请参阅jQuery()的CDN fallback。我认为这不是问题所在。@ParthTrivedi-我尝试了$.getScript,但也不起作用。它甚至返回一个新的404notfound
错误。可能是“~/scripts/datatables.min.js”
路径有问题。它找不到它,正在获取404
。请验证路径。这不起作用,返回一个404未找到
错误,后跟未定义
。我已更改URL。请查收。尝试给出完整的Url路径。相对url可能有问题。
“~/”
。捕捉得好!根据,“在脚本中时,路径相对于显示的页面…”Tilda/相对URL在脚本中不起作用。您的解决方案有效,但与已更正的文档相比有一定的延迟。编写技巧。@Alfred这个答案对您有帮助吗?然后投票。我不同意你说的文档。同时编写和警报()document.write
是同步加载,并在脚本之外执行。然后,处理alert()
,因此在执行document.write
之后。因此,$(document).ready()
不是加载插件的方法,因为加载页面时会丢失插件并生成错误document.write
是一种公认且推荐的CDN回退方法-请参阅上面的参考资料。同意,Scott Hanselman按照我在上面的回答中所述的方式提供了您所需的方法。
<script>
if (typeof jQuery.fn.dataTable === 'undefined') {
document.write('\x3Cscript src="/scripts/datatables.min.js"\x3E\x3C/script\x3E');
//document.write('<script src="/scripts/datatables.min.js"><\/script>');
}
</script>
<script>window.jQuery.fn.dataTable || document.write('\x3Cscript src="/scripts/datatables.min.js"\x3E\x3C/script\x3E')</script>