我已将此问题隔离在此处:
http://jsfiddle.net/ajkochanowicz/pEnMw/2/
基本上,我尝试在我的脚本中添加一项功能,以便在CDN托管的文件失败时查找本地版本的.js文件。所以在.done或错误或完整中加载该脚本似乎是合适的,但这些都不起作用。
澄清:寻找适用于用户定义的js文件的解决方案,因此测试每个文件中的各个函数是不可行的。
关于这个类似主题的问题已经有很多问题,但我发现的所有问题都是关于让请求工作或处理JSON(P)请求。 :(我对使用.js文件进行错误处理感兴趣。
感谢。
答案 0 :(得分:3)
无法知道script
元素是否无法加载,因此唯一的解决方案是添加超时。
引用jQuery's ajax
documentation(settings.error
部分):
错误(jqXHR,textStatus,errorThrown)
[...]
注意:不会为跨域脚本和JSONP请求调用此处理程序。
我已更新your fiddle以包含timeout
:
$.ajax({
type: "GET",
url: urlVar,
dataType: 'script',
timeout : 5000,
success: function(data) {
alert('it worked');
},
error: function(xhr, ajaxOptions, thrownError) {
alert('it did not work');
},
});
答案 1 :(得分:0)
不会为跨域脚本和JSONP请求调用$.ajax
中的错误处理程序。
答案 2 :(得分:0)
一个可以工作的解决方案,假设您想要的库是jquery:
在标题中:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
在你体内:
<script>
window.onload=function(){
if (!$) { // jquery isn't available even after the window is fully loaded, so the distant loading failed
var head= document.getElementsByTagName('head')[0];
var script= document.createElement('script');
script.type= 'text/javascript';
script.src= 'myOwnJquery.js';
script.onload = someCallback; // <- might be usefull
head.appendChild(script);
}
}
</script>
在此示例中,使用要测试的库的函数替换$
。
这样做的主要原因是你可以设置一个回调,所以你现在不要尝试做你的库之前无法做的事情。