読者です 読者をやめる 読者になる 読者になる

モノノフ日記

普通の日記です

Ajaxヘルパーの挙動

symfonyprototype.jsscript.aculo.usフレームワークに統合されてて
Javascriptヘルパーから呼び出せます。(Railsにあるヘルパーとほぼ一緒、ていうかパクリ)

でも、どのヘルパーがどのAjaxクラス呼ぶのか公式マニュアル細かく書かれてないので調べてみました。

<?php
use_helper('Javascript');

link_to_remote('click me', array(
    'url' => 'publish/refresh',
    'with' => "'value' + value",
    'complete' => "showResponse(request, json)",
));
    • 変換コード
<a href="#" onclick="new Ajax.Request('/publish/refresh', {asynchronous:true, 
evalScripts:false, onComplete:function(request, json){showResponse(request, json)}, 
parameters:'value' + value}); return false;">click me</a>
<?php
use_helper('Javascript');

link_to_remote('click me', array(
    'url' => 'publish/refresh',
    'update' => 'element',
    'with' => "'value' + value",
    'complete' => "showResponse(request, json)",
));
    • 変換コード
<a href="#" onclick="new Ajax.Updater('element', '/publish/refresh', 
{asynchronous:true, evalScripts:false, onComplete:function(request, json){
showResponse(request, json)}, parameters:'value' + value}); return false;">click me</a>
<?php use_helper('Javascript') ?>

<div id="notification"></div>
<?php echo periodically_call_remote(array(
    'frequency' => 60,
    'update'    => 'notification',
    'url'       => 'publish/watch',
    'with'      => "'param=' + \$F('mycontent')",
)) ?>
    • 変換コード
<script type="text/javascript">
//<![CDATA[
new PeriodicalExecuter(function() { 
  new Ajax.Updater(
    'notification', 
    '/ajax/watch', 
    {asynchronous:true, evalScripts:false, parameters:'param=' + $F('mycontent')})
}, 60)
//]]>
</script>

まとめ

  • Ajax.RequestとAjax.Updaterはオプション指定をしている配列要素に"update"があるか無いかで判定
  • withはprototype.jsのparametersに相当するものだが、phpの文字列として書く必要があるため、$を使いたいときはバックスラッシュでエスケープしないと動かない
  • Ajax.PeriodicalUpdaterは呼ばれずにPeriodicalExecuterからAjax.Updaterが呼ばれる