1

我正在尝试使用 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')",
))
 ) ?>
4

1 回答 1

2

来自“ 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 输出的情况下,我只能这么说。

于 2009-08-05T03:37:49.460 回答