1

我在这里隔离了这个问题:

http://jsfiddle.net/ajkochanowicz/pEnMw/2/

基本上,如果 CDN 托管的文件失败,我会尝试在脚本中添加一项功能来查找 .js 文件的本地版本。因此,在 .done 或 error 或 complete 中加载该脚本似乎是合适的,但这些都不起作用。

澄清:寻找一种适用于用户定义的 js 文件的解决方案,因此测试每个函数中的单个函数是不可行的。

SO上有很多关于这个类似主题的问题,但我发现的只是让请求工作或处理JSON(P)请求。:( 我对 .js 文件的错误处理很感兴趣。

谢谢。

4

3 回答 3

3

无法知道script元素是否加载失败,因此唯一的解决方案是添加超时。

引用jQuery 的ajax文档settings.error部分):

错误(jqXHR,textStatus,errorThrown)

[……]

注意:跨域脚本和 JSONP 请求不调用此处理程序。

我已经更新了你的小提琴以包括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');
    },
});
于 2012-07-20T15:38:23.467 回答
0

$.ajax跨域脚本和 JSONP 请求不调用错误处理程序。

于 2012-07-20T15:38:33.550 回答
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>

$在此示例中,用您要测试的库的函数替换。

这样做的主要原因是您可以设置回调,因此您现在不要尝试在拥有库之前无法完成的事情。

于 2012-07-20T15:43:02.983 回答