如何从Ajax响应中执行主窗口中定义的Javascript函数

如何从Ajax响应中执行主窗口中定义的Javascript函数,javascript,ajax,prototypejs,Javascript,Ajax,Prototypejs,我在main index.html文件中定义了Javascript函数。此页面的一部分是通过prototype.js使用Ajax更新的。尝试从返回的AJAX代码中执行主文件中定义的Javasript函数失败。 evalscript:Ajax.Updater prototype.js函数中的true选项没有帮助。 我该如何解决这个问题?先谢谢你 这是我的index.html文件: <html> <head> <script src="js/lib/prototype.

我在main index.html文件中定义了Javascript函数。此页面的一部分是通过prototype.js使用Ajax更新的。尝试从返回的AJAX代码中执行主文件中定义的Javasript函数失败。 evalscript:Ajax.Updater prototype.js函数中的true选项没有帮助。 我该如何解决这个问题?先谢谢你

这是我的index.html文件:

<html>
<head>
<script src="js/lib/prototype.js" type="text/javascript"></script>
<script type="text/javascript">
    function foo(x) {
        alert(x);
    }

    function loadContent() {
      new Ajax.Updater('responseArea', 'response.php' , { evalScripts: true } );
    }
</script>
</head>

<body>
    <div id="main">
        <span style="cursor: pointer" onclick="loadContent();">Click on me to call Ajax response</span><br>
        <br></br>
    </div>

    <div id="responseArea">
        This will be replaced with Ajax response
    </div>
</body>
</html>


This is response.php:
  <?php
         echo '<span style="cursor: pointer" onclick="foo("foo Called from within Ajax response");">
             Click on me to call foo from within Ajax response</span>';
   ?>
由于evalscript为true,因此可以将任何JS代码段放入响应中,并在AJAX调用完成时执行:

<script type="text/javascript">
foo("foo Called from within Ajax response");
</script>
如果您不想执行,但只想包含更多JS,可以插入一个常规JS include标记:

<script type="text/javascript src="yournewcode.js"></script>

这比包含JS内联更好,因为它允许浏览器缓存文件。

您需要在Echoc中转义那些双引号。非常感谢您的回答。我试过了,效果很好。但它并不是按照预期的方式执行的——它会立即执行响应代码中的所有脚本。我希望这些函数可以从AJAX响应中访问,但不需要在AJAX调用完成后执行它们。例如,在response.php代码中,当用户单击span时,应该执行foo函数。现在它只是立即执行。有没有办法修复它?比你加的还要好。我试过了,但没用。这是我的response.php文件:这是f.js:function ffx{alertx;}使用Firebug或其他调试器打开NET选项卡,观察您的js是否在AJAX调用后添加到DOM中,或者是否出现404错误。Firebug显示两者都没有-它显示成功调用response.php,而没有调用f.js。这很奇怪,因为我的AJAX响应中包含了一些JS。您还可以编写一些JS将脚本标记附加到页面标题,并在代码中设置SRC。