CDN fallback for DataTables.js
CDN fallback for DataTables.js
我正试图为datatables.min.js
编写一个CDN回退——不知怎么的,我在谷歌或datatables.net上找不到。在阅读了这篇StackOverflow帖子和这篇datatables帖子后,我想出了这篇不成功的文章(甚至尝试了各种表达式,如图所示):
<script>
if (typeof jQuery.fn.dataTable === 'undefined') {
document.write('<script src="~/scripts/datatables.min.js"><'/script>');
//document.write('<script src="~/scripts/datatables.min.js">'x3C/script>'); //same
//document.write(''x3Cscript src="~/scripts/datatables.min.js"'x3E'x3C/script'x3E'); //same
}
</script>
为了进行故障排除,我直接加载了datatables.min.js
,得到了以下两个令人困惑的结果:
1/I从此获得undefined
(BAD)
<script>
document.write('<script src="~/scripts/datatables.min.js"><'/script>');
</script>
<script>
alert(typeof jQuery.fn.dataTable);
</script>
2/。。。但不知怎么的,我从中得到了function
(好):
<script src="~/scripts/datatables.min.js"></script>
<script>
alert(typeof jQuery.fn.dataTable);
</script>
这在我看来是一样的,特别是因为document.write
使用同步加载。我还尝试了一个纯DOM方法,但没有成功。
document.write
缺少什么
试试这个
<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>
在您的代码文档中,write和alert将同时处理,请注意,在"database.min.js"可用时,alert将完成。
使用$(document).ready()或winidow.onload,您将看到预期的结果。
尽管在做这件事之前阅读了最佳实践,优缺点在这里-
http://www.stevesouders.com/blog/2012/04/10/dont-docwrite-scripts/
我建议使用RequireJS来有效地完成这项工作,正如Scott Hanselman所描述的那样,请在尝试之前先浏览下面的链接,因为他详细讨论了CDN回退,并涵盖了它的各个方面-
http://www.hanselman.com/blog/CDNsFailButYourScriptsDontHaveToFallbackFromCDNToLocalJQuery.aspx
希望它能对你有所帮助,给你找到正确方向的坚实基础。
根据公认的回退实践,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>
或简称
<script>window.jQuery.fn.dataTable || document.write(''x3Cscript src="/scripts/datatables.min.js"'x3E'x3C/script'x3E')</script>
正如@ParthTrivedi所建议的那样,src=""
中的tilda/相对路径是问题所在(见注释)。根据这篇文章,"在脚本中,路径是相对于显示的页面"。
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 借助D3.js集成Datatables插件
- DataTables, Ember.js and Views inside a <td>
- 如何用JSON对象填充表(Datatables.js)
- 如何在excel中将数字转换为文本;datatables.js”;下载
- 将 JSON 字符串转换为 JSON 对象,这样我就不需要在基本的 jquery.dataTables.js 中进行更改
- JS DataTables ColReorder API Reorder Bug?
- sinon.js监视$.dataTables函数
- 使用$.parseJson()datatables.js添加aocolumns
- CDN fallback for DataTables.js
- 使用D3.js时,DataTables中出现Javascript错误
- 为什么不是'我的datatables.js上的搜索函数正在工作
- 可以'在sails.js+angularjs项目中无法使DataTables响应
- 使用DataTables.js的多个功能
- DataTables.js对包含带整数文本的HTML链接的列进行排序
- Lightcase.js and dataTables.js Conflict
- datatables.js正在对渲染的输出进行处理
- jQuery DataTables with Node.js