【问题标题】:How can I get Javascript to work within Prototype AJAX Request如何让 Javascript 在原型 AJAX 请求中工作
【发布时间】:2010-11-16 21:13:33
【问题描述】:

我正在尝试使用 Prototype/AJAX 从外部 PHP 页面中提取 HTML/Javascript,并且 HTML 呈现正常,但是在 AJAX 请求之后 Javascript 不起作用。

我还在页面加载数据时显示了一个加载栏,这部分工作正常。我的 Symfony PHP + Prototype 代码如下。任何可能使我朝着正确方向前进的建议将不胜感激!

<?php echo javascript_tag(
      remote_function(array(
      'update'  => 'getinfo',
      'method'    => 'get',
      'script'     => true,
      'url'     => 'event/load?id='.$sf_params->get('id'),
      'loading'    => "Element.show('loading')",
     'complete'   => "Element.hide('loading')",
))
 ) ?>

【问题讨论】:

    标签: php javascript ajax symfony1 prototypejs


    【解决方案1】:

    来自“The Definitive Guide to Symfony”:

    即使您为远程响应启用脚本执行,如果您使用工具检查生成的代码,您实际上也不会看到远程代码中的脚本。脚本将执行但不会出现在代码中。虽然很奇怪,但这种行为是完全正常的。

    我相信这是因为remote_function是使用Prototype的Ajax.Updater实现的; remote_functionscript 选项变为 Ajax.Updater 的 evalScripts 选项。 Ajax.Updater 的文档是这样说的:

    如果您使用 evalScripts: true,则将评估任何块。这并不意味着它将被包含在页面中:它们不会。它们的内容将简单地传递给本机 eval() 函数。 [...要定义一个函数,]您需要使用以下语法:

    // This kind of script WILL work if processed by Ajax.Updater:
    coolFunc = function() {
        // Amazing stuff!
    }
    

    这表明您遇到了范围界定问题。在没有看到 event.php 的 javascript 输出的情况下,我只能这么说。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多