调用从Ajax响应返回的JavaScript函数

williamtroup:

我有一个发送Ajax命令的系统,该命令返回一个带有功能的脚本块。在将这些数据正确插入DIV中之后,我希望能够调用此函数来执行所需的操作。

这可能吗?

费德里科·赞坎(Federico Zancan):

我想以这种形式正确解释您的问题:“好,我已经用完所有的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章