かなり前に下書きしたまま放置していた記事を見つけた。あまり検証していないが公開しておく。
RESTful なアプリケーションを作るために、jQuery で PUT メソッドと DELETE メソッドのリクエストをサーバに送り、PHP でそれを受け取る方法についてメモしておく。
まず、クライアントからサーバに PUT、DELETE で Ajax リクエストを送るための jQuery メソッド、$.put() と $.delete() を定義する。
jQuery.each( [ "put", "delete" ], function( i, method ) {
jQuery[ method ] = function( url, data, callback, type ) {
if ( jQuery.isFunction( data ) ) {
type = type || callback;
callback = data;
data = undefined;
}
return jQuery.ajax({
type: method,
url: url,
data: data,
success: callback,
dataType: type
});
};
});
POST で Ajax リクエストを送る既存のメソッド $.post() は、次のように使う。
$.post(
"***.php",
JSON.stringify({
foo: "bar",
hoge: "fuga"
}),
function(data, text_status) {
:
:
}
);
これにより、2つめの引数に指定した JSON オブジェクトが文字列化されて、サーバに送られる。
先ほど定義した $.put() と $.delete() も、$.post() と同様に使える。
$.put(
"***.php",
JSON.stringify({
foo: "bar",
hoge: "fuga"
}),
function(data, text_status) {
:
:
}
);
$.delete(
"***.php",
JSON.stringify({
foo: "bar",
hoge: "fuga"
}),
function(data, text_status) {
:
:
}
);
これでクライアントからサーバに、PUT、DELETE でもリクエストを送れるようになった。ただし、GET と POST 以外のメソッドは、全てのブラウザで対応しているわけではない。また、GET リクエストを送るには $.getJSON() を使えば良い。
次に、送られてきたリクエストを、以下の PHP コードで受け取る。
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
$req = array();
parse_str($_SERVER['QUERY_STRING'], $req);
} else {
$req = json_decode(file_get_contents('php://input'));
$req = get_object_vars($req);
}
これにより、クライアントから送られてきたリクエストが、配列 $req に格納される。
参考ページ
- RESTful Web サービスの基本 – IBM
- jQuery.ajax() – JQUERY API
コメント