我有以下设置:一个Javascript文件(包含一个Ajax将放入新Div的google可视化功能)和一个vbscript文件,其中包含Ajax调用的实现函数,该函数在标签内写入google visualization javascript。
在javascript文件中的Ajax调用中,我将Ajax调用的内容放入一个新的div中,并将其附加到容器div。然后我调用了一个google javascript函数,这是Ajax调用添加到html的新内容。
如果我在google javascript函数调用之前有一个alert或setTimeOut(),它就可以了。如果我只是立即调用它没有的功能。因此,在新的Ajax添加的javascript代码可以被识别之前,似乎有一些延迟。
有没有优雅的方法可以在没有超时的情况下调用该函数?我写了一个while循环来保持循环,直到找到新的附加节点,但函数调用仍然无法识别。
function ProcessAjaxCall(DivID, ResponseText)
{
var NewDiv = document.createElement("div");
NewDiv.id = "myscript";
NewDiv.innerHTML = ResponseText;
document.getElementById(DivID).appendChild(NewDiv);
//alert('Function below only works when this outputs');
MyGoogleJSFunction('Arg');
}
因此,MyGoogleJSFunction是通过Ajax调用编写的代码的一部分,位于NewDiv内。
答案 0 :(得分:1)
这是因为解析器在执行JavaScript时无法重新呈现当前页面(至少现在还没有)。您必须给予控制权以允许浏览器加载并执行包含的脚本。一种方法是使用setTimeout
(例如延迟0
);另一种方法是关闭并重新打开当前的脚本元素,就像Google Analytics做的那样:
<script type="text/javascript">
var _gaq=_gaq||[];
_gaq.push(['_setAccount','UA-XXXXXXX-X']);
_gaq.push(['_trackPageview']);
(function(){
var ga=document.createElement('script');
ga.type='text/javascript';
ga.async=true;ga.src='http://www.google-analytics.com/ga.js';
var s=document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga,s);
})();
_qoptions={qacct:"p-c1rF4kxgLUzNc"};
/* now close this script element, so we can use functions included
* by the GA script */
</script>
<script>
// …
</script>