備忘録のため,内容の正当性については責任を持ちません。

かなり前に下書きしたまま放置していた記事を見つけた。あまり検証していないが公開しておく。


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 に格納される。


参考ページ

コメント

コメントする




CAPTCHA