2011-03-14 14 views
0
私は、ドキュメントに外部の.jsファイルをロードするためのスクリプトのこの部分を使用している

ロード外部の.js 1.5.1

$.ajax({ 
    url: dir + '/' + module + '.js', 
    dataType: 'script', 
    async: false, 
    success: function() { 
     modules[module].init(); 
    }, 
    error: function(xhr) { 
     alert('Error loading module "' + module + '"'); 
    } 
}); 

しかし、私はjQueryの1.5.1に切り替えると(の代わりに1.4 .2私は以前に使用していた)動作を停止します。ファイルはロードされますが、成功しません - ファイルの内容がエラーとして渡されますxhr.responseText

答えて

0

'success'イベントの代わりに$ .ajax()の 'complete'イベントを使用できますか?


あなたが動的にjavascriptのソースファイルをロードする必要がある場合は、[ヘッド]タグに[スクリプト]のタグを追加することができます。それに唯一の問題は、あなたが防ぐ必要があります

$("head").append(
    unescape('%3Cscript src="/path/to/javascript.js"%3E%3C/script%3E'); 
); 

スクリプトが複数回読み込まれることを防ぎます。

私が知っている関数の存在をテストするif()条件は、動的にロードされるjavascriptファイルで定義されています。私はunderscore.jsと_.isFunction()を使ってこれをテストします(http://documentcloud.github.com/underscore/#isFunction)。テスト関数が定義されていない場合にのみ、javascriptのSRCファイルを読み込む:あなたのコードは、いくつかのスコープの問題を持っているようにあなたが投稿したものから

if(!(_.isFunction(someTestFunction))) { 
    $("head").append(
    unescape('%3Cscript src="/path/to/javascript.js"%3E%3C/script%3E'); 
); 
} 
+0

私はおそらくそのようなことをすることができますが、本当に興味があるのはなぜjQuery 1.4.2で正常に動作したスクリプトがv1.5.1で動作しないのかです。 – Allan

0

なぜこのようなものを使用しないのですか?

<script type="text/javascript" src="/jquery-1.5.1.js"></script> 
<script type="text/javascript" src="/[name of script].js"></script> 

jQueryファイルを使用する関数を定義する前に、そのファイルを必ず含めてください。

+0

これは私が求めているものではありません。システムはモジュールを動的にロードして起動できる必要があります。 – Allan

0

が、それはそう。どんな文脈でそれが使われているかを見ることなく、何が間違っているのかを正確に伝えるのは難しいですが、変数moduleがあなたのsuccess & errorコールバックで定義されていないためです。だから私はこれらの2つのコールバックでmoduleが定義されているかどうかを確認する必要があります。

また、いつでも自分で保存して$.getScriptを使用することもできます。

+0

スコープ? :)それは "成功"をトリガーしません、それは直接 "エラー"に行くので、任意のスコープはここで原因ではないはずです。おそらく、.jarアーカイブからスクリプトを読み込むことになるはずですが、前に述べたように、jQuery v1.4.2ではうまくいきました – Allan

関連する問題