7

これは非常に単純でなければなりません。外部 JavaScript ファイルには以下が含まれます。

function Hello() {
    alert('Hello');
}

getScript()edされ、含まれている関数が呼び出されます

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $.getScript('myscript.js');
    Hello();
</script>

私は得る:

ReferenceError: Hello が定義されていません

ただし、スクリプトが HTML<script>タグで参照されている場合は、期待どおりに機能します。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
<script src="myscript.js" type="text/javascript"></script>
<script type="text/javascript">
    Hello();
</script>

私は何が欠けていますか?getScript()ed スクリプトで作成されたオブジェクトを参照する方法は? イベントgetScript()でスクリプトをロードするために使用したい理由。ready()

4

2 に答える 2

13

問題は、$.getScript()関数が非同期であることです。Hello()直後に関数を呼び出すと、スクリプトはまだロードされていないため、関数は使用できません。

通常のタグを使用したスクリプトの読み込み<script>は同期的に行われるため、その動作を再現したい場合asyncは、Ajax 呼び出しでオプションを無効にする必要があります。

getScript$.ajax単独ではこれをサポートしていないため、適切なオプションを指定した呼び出しを使用してこれを行うことができます。

 $.ajax({
     url: 'myscript.js',
     dataType: 'script',
     async: false
});

これにより、スクリプトが読み込まれるまでブラウザがブロックされます。

ただし、次のことを$.getScript()サポートするコールバックを使用することをお勧めします。

$.getScript('myscript.js', function() {
    Hello();
});
于 2013-10-31T20:47:17.513 に答える
5

応答を待つ必要があります。

$.getScript('myscript.js', function(){
    Hello();
});
于 2013-10-31T20:48:42.240 に答える