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

技術メモ

業務で調べたこととか...

FuelでAjaxを使う

Ajaxでリクエストを投げて、FuelPHPのコントローラで処理する。

フロント

var res_json = $.ajax({
	type          : 'post',
	url           : '/result/fetch.json',
	data          : JSON.stringify(post_data), // POSTするJSONデータ
	contentType   : 'application/json',
	dataType      : 'json',
	processData   : false,
	async         : false,
	cache         : false,
	scriptCharset : 'utf-8',
	// 成功
	success: function(json_data) {
		return json_data;
	},
	// 失敗
	error: function() {
	},
	// 完了時
	complete: function() {
	}
}).responseText;

var res_obj = $.parseJSON(res_json);
var result = res_obj.result;


戻り値を参照する場合は、$.ajax()の戻り値であるXMLHttpRequestオブジェクトを変換する必要がある。
responseTextメソッドで文字列に変換して、$.parseJSONでパースする運びとなる。

Ajaxについては下記を確認する。
jQuery.ajax(options) - jQuery 日本語リファレンス

サーバ

<?php

/**
 * WebAPIとして機能する
 *
 */
class Controller_Result extends Controller_Rest
{
   /**
    * /result/fetch.json
    *
    */
    public function post_fetch()
    {
        $res = self::fetch_response();

        return $this->response($res, 200);
    }

    private static function fetch_response()
    {
	// レスポンスを取得するための何かしら
	Input::json();
	...
    }
}


REST形式でJSON/XMLデータを返したい場合は、RestControllerを使う。
fuel/app/classes/controllerディレクトリ内にクラスを作成し、Controller_Rest クラスを継承する。

リクエストURLの末尾によって、コントローラが返すデータが自動整形される。
例えば、/result/fetch.jsonの場合はJSONデータが返される。

RestControllerについては下記を確認する。

プロフェッショナルプログラマー: Fuel PHP で Ajax
jQueryでJSONをPOSTしてFuelPHPで受け取る — A Day in Serenity (Reloaded) — PHP, FuelPHP, Linux or something
FuelPHP の Rest コントローラの使い方とデフォルトフォーマットの変更の仕方 - Qiita