_onichannn

Javascriptにてオブジェクトの中身が空か判定する方法。

メモ。

var obj = {'key': 'value', ...}
console.log(Object.keys(obj).length);

これでオブジェクトの要素数がわかるので、あとは比較演算子で1以上と指定すれば空判定が可能。

Javascriptの配列とオブジェクトを間違える事勿れ。

超絶初歩的だけど数分間悩んだのでメモ。

// 配列を生成するとき
var data = ['str1', 'str2', 'str3', ...];

// オブジェクトを生成するとき
var obj = {'key1': 'value1', 'key2': 'value2', ...};

ついさっきまで[]と{}の何が違うのとか思ってた件www

CakePHP2系にてヘッダーのContent-Typeをjsonに設定する。

メモ。

$this->response->type('json');
$this->response->send();

以上!

最後のsend()関数は通常リクエストの最後Dispatcherによって自動的に行われるが、自ら処理を殺している場合などはヘッダの送信処理が行われないため、自分で実行してあげないと想定した挙動にならないので注意。

例えば以下のような場合。

// 何かしらのデータ配列
$data = array('my' => 'apple', 'favorite' => 'banana', 'food' => 'orange');

$this->response->type('json');
$this->response->send();

// jsonデータとして出力して処理終了
echo json_encode($data);
die();

Ajaxの処理とかでjson形式のデータをコールバック関数に渡したい時などにやるやーつー。

CakePHP2系にて通信手段がAjaxかどうか判定する。

メモ。

if($this->request->is('ajax')){
	// Ajaxによる通信です。
}

これはシンプルかつ強力。リクエストオブジェクト便利だね。

jQueryによるAjax、もっとシンプルに。

この記事←で書いたAjaxの処理部分、わざわざdone()、fail()、に無名関数を入れてやら無くてもよかった模様。

関数を定義した後以下の書き方でOK。

$.ajax({
	url: 'http://example.com/',
}).done(success).fail(error);

ちなみに値をPOSTで送信したい時などはこんな感じ。

var data = {"my":"apple","favorite":"banana","food":"orange"};
$.ajax({
	url: 'http://example.com/',
	type: 'POST',
	data: data,
}).done(success).fail(error);

簡単だね!
ちなみにCakePHPだとPOSTされた値は以下の、

$this->request->data;
$this->params->data;

どっちでも参照できるけど、どっちがいいんだろうね。せっかくリクエストオブジェクトが用意されているならそっちを使ったほうが良いような気もするけど、ついつい$this->paramsの中に都合の良いパラメーターが入ってきてないか確認しにいっちゃうよね。笑

だって$this->paramsちゃん万能なんですもの!!

jQueryでのAjax処理、自分用メモ。

やるたびに調べるのはもういやだぁぁぁぁ!
ということで自分用メモ。
※コードが激しくイケてない可能性が十分考えられます。

// まずは成功時の処理と失敗時の処理を定義
var success = function(data){
	// 成功時の処理を記述
	alert('ok');
}
var error = function(data){
	// 失敗時の処理を記述
	alert('ng');
}

$.ajax({
    url: 'http://example.com/',
}).done(function(data){
	success(data);
}).fail(function(data){
	error(data);
});

jQuery1.8以上では上記の記述方法が推奨されており、従来利用していた関数は以下のような対応になっている。

jQuery 1.7以下 jQuery 1.8以上
success() done()
error() fail()
complete() always()

EclipseのPDTにて半角スペースのインデントを取り除く方法。

ソースコード内のインデントがTabではなく半角スペース4つ分とかだった場合、デフォルト状態だとShift+Tabでインデントを下げることが出来なかったので、どうしたらいいか調べたときのメモ。(※英語環境なのでご了承を。)

bc8cdb7b1b343fc8c9691ae6c62eab99

1, 上部メニューバーより「Window」→「Preferences」を選択

21da0303b4936dcefb348bb40aae7990

2, 出てきたウィンドウの左メニューツリーの「PHP」→「Code Style」→「Formatter」を選択

3, 右ウィンドウの「Tab policy:」を「Tabs」から「Spaces」に変更

4, 最後にウィンドウ下部の「OK」を押せば完了

この設定を行うことで、Tab文字だろうが半角スペースだろうがShift+Tabでインデントを下げることが可能になった。
他人が書いたコードのインデントルールを自分好みに整形しなおしたいときにこれは便利。

※インデントを消し去った後、この項目の設定を戻し忘れないように注意

PHP5.4にて関数内配列への直アクセスが可能に。

PHP5.4からFunctionArrayDereferencingが取り込まれたため、いちいち関数の返り値(配列)を変数に入れてあげなくても、要素への直アクセスが出来るようになった。例えば以下のような感じ。

$this->hogeFunction()[2];
$this->fugaFunction()[0]->piyo;

PHP5.3ではいったん変数に突っ込んであげないとエラーになるけど、逆になんで出来ないんだろうと疑問に思っていたのでこれはありがたい。
自分は返り値をいちいち変数にこめたりして行数がちょっとでも増えるのが嫌なので、これだけで5.4環境に乗り換えようかと思うくらい魅力的である。
if, for, foreachとかも(単純な処理の場合は)極力1行で書きたい病気だったりする。

ワンライナー万歳?(^o^)/