2012年10月27日土曜日

Fuel PHP で Ajax

Document や本を読んでいてもどうも明確な答えが得られなくてはまっていましたが, どうやら読み違えと知識不足ではまっていました。

目標:
jQuery の Ajax $.ajax でリクエストを投げて, Fuel PHP のコントローラで処理
結果を json で返して, そのデータを success で処理する

このとき, ページのリフレッシュはしない


※jQuery の設定や, Fuel PHP の基礎知識は前提とします
※ ログイン処理を省きます


・まずはまってしまうのは, 通常のcontroller つまり, Controller_Template, Controller
を extends してつくる 通常のページコントローラ で action_xxx() をつくるのではないということ

->  つまり, action_xxx() で処理をして, ページを返すという処理とは, クラスを切り離します

->  Controller は, ページ(view)を返して, そのview (.php) を処理するのでページのまるごとリフレッシュ


・ Controller_Rest を拡張したクラスを作りましょう

-> ここがポイントです, Restful がどうだとか, いろいろ書いてますが 言いたいことは, ページまるごとではなく, json, jsonp, XML などの形式でデータを返したい場合には, このクラスの拡張クラスをページで利用するコントローラとは別で用意します

->  もちろんこうした処理を返すクラスを自作するのもアリですが, Controller_Rest  は簡単です



ex)  POST リクエストをして, そのデータをjson で返し, そのデータをダイアログで表示

●JavaScript サイド


$.ajax({
                type: "POST",
                url: "/resourcerest/create.json",
                dataType : 'json',
                data: "id="  + $("#product").val() + "&key=" +$("#new_key").val(),
                success: function( res )
                {
                    alert(res.key);
                }
             });

※jQuery のAjax 関数です, POST リクエストを, resourcerest というコントローラの create という関数にリクエストを出しています。

data には key=value 形式で, 文字列データを渡しています

success 関数で 返ってきたデータを表示しています


●PHP サイド


<?php

class Controller_Resourcerest extends \Fuel\Core\Controller_Rest
{
    public function post_create()
    {
        $name = $_POST['key'];
        $data = array('key' => $name);
        return $this->response($data, 200);
    }
}
?>


※ Controller_Rest を拡張した処理関数です。 通常のページの処理とは違いますね。
さて処理関数ですが

リクエストのタイプ_処理名   という形になります  ここでは, POST リクエストの create という処理名で jQuery 側で書いたので post_create という関数になります

残りは通常の処理と同じです, $data に, array データを入れると, json 形式で返してくれます

(※ create.json にしているので json になります XML の場合は create.xml とかになります)


●実行してみた
作者が個人的に作っているサイトの一部です




テキストボックス(id=new_key)に入れたデータをそのままjson 形式で返して, 表示してみました

0 件のコメント:

コメントを投稿