0

以下のhtmlをajax経由でdivに保存すると問題が発生します

<script type="text/javascript" src="site.com/file.js"></script>
<script type="text/javascript">
//use file.js object, get an exception because it doesn't exist

ローカルでホストすることで修正しました(/myjs/file.js)。しかし、それはハックのように感じます。最初にロードしてから実行するようにするにはどうすればよいですか? HTMLをajaxする前にDOMの準備ができていたため、jquery.readyは解決策ではないようです.どうすれば適切に待つことができますか?

4

3 に答える 3

4

あなたが言及jQuery.readyしているので、jQueryを使用していると思います。<script>その場合は、 のコンテンツにタグを配置する代わりに をdiv使用しますjQuery.getScript。これにより、スクリプトがロードされたときにコールバックが返されます。

何らかの理由でそれができない場合は、たとえば から何かを使用したいコードでポーリングできますfile.js

function doSomethingWithFileJS() {
    if (typeof anObjectProvidedByFileJS === "undefined") {
        setTimeout(doSomethingWithFileJS, 50);
        return;
    }

    // Here, you know file.js has been loaded
}
于 2013-01-18T19:34:03.247 に答える
2

次のことを行うことで、それを確認できるはずです。

<script type="text/javascript" src="site.com/file.js" onload="myFunc()"></script>
<script type="text/javascript">
function myFunc() {
   //use file.js object here
}
</script>

このonload属性は、スクリプトがロードされたときに実行される関数を指定します。

于 2013-01-18T19:34:12.020 に答える
1

最善のアプローチではありませんが、次のようなことができます。

function checkIfLoaded(){
   if(typeof somefunctioninfilejs == 'function'){
     // load other script here
   }
   else {
     // not loaded queue up a check
     setTimeout(checkIfLoaded, 300);
   }
}
于 2013-01-18T19:36:09.700 に答える