Ajax.Updaterでscriptを実行

Ajax.UpdaterのevalScriptsオプションをtrueにすると、返ってきたresponseText内に記述してあるjavascriptが実行されるようになる模様。

shop/add_to_cart.php

<p>js off</p>
<script type="text/javascript">
$('a').innerHTML = '<p>js on</p>';
</script>

shop/show.php

<form id="aForm" action="shop/add_to_cart.php" method="post"
  onsubmit="new Ajax.Updater('shop/add_to_cart.php', {asynchronous: true,
                                                      evalScripts: true, 
                                                      parameters: Form.serialize(this)
                                                     }); return false;">
  <div id="box">...</div>
  <input type="submit" name="commit" value="commit" />
</form>

上のスクリプトは検証してないんだけど、とりあえずあんな感じで使います。responseTextがロードされた上でスクリプトが実行できるのがいいところ。

んで実際にはsymfony使ってて、form_remote_tagにオプション指定してtrueにできるんだけど、名前が違うのでメモ。

<?php use_helper('Javascript') ?>
<?php echo form_remote_tag(array('url'    => 'shop/add_to_cart',
                                 'update' => 'box',
                                 'script' => true,
)) ?>