我想正确地解释你的问题在这种形式:“好吧,我已经完成了所有的Ajax的东西;我只想知道,如果JavaScript函数我的Ajax回调插入DIV是可调用的,从那一刻起的任何时间,也就是说,我不想将其上下文调用到回调返回“。
OK,如果你的意思是这样的答案是肯定的,你可以在浏览器的页面持久性的任何时候调用你的新代码,在以下条件:
1)Ajax回调返回的JavaScript代码必须在语法上OK;
2)即使你的函数声明被插入到< script>块在现有的< div>元素,浏览器不会知道新的函数存在,因为声明代码从未被执行过。所以,你必须eval()你的声明代码返回的Ajax回调,以有效地声明你的新函数,并在整个页面生命期间可用。
即使很虚假,这段代码解释了这个想法:
<html> <body> <div id="div1"> </div> <div id="div2"> <input type="button" value="Go!" onclick="go()" /> </div> <script type="text/javascript"> var newsc = '<script id="sc1" type="text/javascript">function go() { alert("GO!") }<\/script>'; var e = document.getElementById('div1'); e.innerHTML = newsc; eval(document.getElementById('sc1').innerHTML); </script> </body> </html>
我没有使用Ajax,但概念是一样的(即使我选择的例子肯定不是很聪明:-)
一般来说,我不怀疑你的解决方案设计,即是否外部化的函数在一个单独的.js文件等,或多或少是适当的,但请注意,这样的解决方案可能会提出进一步的问题,特别是如果你的Ajax调用应该重复,即如果相同函数的上下文改变或者应该关注声明的函数持久性,那么也许你应该认真考虑将你的设计改成这个线程中的一个建议的例子。
最后,如果我误解了你的问题,而你正在谈论的函数的上下文调用,当你的Ajax回调返回,那么我的感觉是建议Prototype方法described by krosenvold,因为它是跨浏览器,测试和完全功能,而这可以为您提供更好的路线图以供将来实施。