0

当我通过 ajax 将下面的 html 存储到 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)。然而,这感觉就像一个黑客。我如何确保我先加载它然后执行?似乎 jquery.ready 不是解决方案,因为在我 ajax html 之前 dom 已经准备好。我该如何正确等待?

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 回答