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プロトタイプの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 に答える