表題が適切ではないかもしれません。
Ajaxアクセス先のコントローラアクションから渡した配列を、呼び出し元のページのjQueryのコード内で利用する方法です。*1
AjaxにはjQueryを、CakePHPではJsヘルパーを利用します。
もしかしたら私の書き方は変わっているかもしれませんので、参考程度に読んでいただけたら助かります。
本題
文字で説明するよりソースコードの方が分かりやすいかもしれません。
call.ctpからAjaxでexecアクションを呼んでデータベースの情報を取得。取得した情報をAjax呼び出し元のcall.ctpのjavascriptソース内で使用するイメージです。
コントローラ
// 略 var $helpers = array('Html', 'Form', 'Js'); /** * 呼び出し元のアクション **/ function call() { // なにも処理しない } /** * Ajaxで呼び出すアクション **/ function exec() { // Ajaxのための記述 $this->layout = 'ajax'; // RequestHandlerコンポーネントを利用しているときは、勝手にやってくれるのでこの記述は不要。 $this->loadModel('Item'); // Itemモデルから1件商品情報を取得してcall.ctpのjsで利用することにしましょう。 $item = $this->Item->find('first'); $this->set('item', $item); // 私はいつも$this->set(compact('item'));って書くけど。 } // 略
call.ctp
このビューにexecアクションをAjaxで呼び出す記述を書きます。
ポイントはAjaxで取得した情報(json)をjQuery.parseJSON()してJavaScriptオブジェクトに変換するところです。
<?PHP echo $this->Html->scriptStart(); ?> function execReprint() { $.ajax({ url: '<?PHP echo $this->Html->url(array('action' => 'exec')); ?>', type: 'GET', success: function(item){ var item= $.parseJSON(item); $("#item_id").text(item.id); $("#item_name").text(item.name); $("#item_price").text(item.price); } }); } <?PHP echo $this->Html->scriptEnd(); ?> <?PHP echo $this->Form->button('EXECを呼び出す'); ?> <p class="manual">↓以下のPに取得した値を書き込む</p> <p id="item_id">?</p> <p id="item_name">?</p> <p id="item_price">?</p>
exec.ctp
Ajaxで呼び出すページのビューです。
ポイントはcallに渡したい配列を$this->Js->object($item)でjson形式のテキストに変換するところです。
このjsonをcall.ctpでjavascriptオブジェクトに戻して利用しています。
<?PHP // $itemを整形 $result = array( 'id' => $item['Item']['id'], 'name' => $item['Item']['name'], 'price' => "¥".number_format($item['Item']['price']), ); // もちろん整形の必要がなければ取得した配列をそのままJs->objectしてもOKです。 echo $this->Js->object($result); ?>
こんな感じ。
こんな記事でお役に立てるでしょうか?心配です。
- 説明が下手くそでごめんなさい。わかりますか? [↩]