我有一个发送Ajax命令的系统,该命令返回一个带有功能的脚本块。在将这些数据正确插入DIV中之后,我希望能够调用此函数来执行所需的操作。
这可能吗?
我想以这种形式正确解释您的问题:“好,我已经用完所有的Ajax东西了;我只想知道从那时起任何时候都可以调用插入到DIV中的JavaScript函数吗? ,也就是说,我不想在上下文中将其称为“回调返回”。
好的,如果您的意思是这样,那么可以在以下情况下,在浏览器中的页面持久性期间的任何时候调用您的新代码:
1)您的Ajax回调返回的JavaScript代码在语法上必须可以;
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回调返回时该函数的上下文调用,那么我的感觉是建议由krosenvold描述的Prototype方法,因为它是跨浏览器,经过测试且功能齐全的,这可以为您提供更好的未来实施路线图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句