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

必要なライブラリが 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 に答える
0

のエラー ハンドラーは$.ajax、クロスドメイン スクリプトおよび JSONP 要求では呼び出されません。

于 2012-07-20T15:38:33.550 に答える