Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript DataTables.js的CDN回退_Javascript_Jquery_Datatables_Cdn_Fallback - Fatal编程技术网

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>