やったこと

webサービスを作るときに考えたことを垂れ流します

【FuelPHP】ajax送信データが$POSTの中に入ってないぞ!

最近アルバイトでFuelPHPのコードをいじっているですが、ajaxで送信したデータがサーバ側でうまく受信できない・・。

クライアント側では下記のようにajaxで送信です。

        var post_data = {
            "hoge1_id": "hoge",
            "hoge2_id": "hogehoge",
            "hoge3_id": "hogehogehoge"
        };
        $.ajax({
            url: "/api/hogege.json",
            type: 'POST',
            cache: false,
            dataType: 'json',
            data: post_data,
            contentType: 'application/json'
        }).done(function(data) {
            alert('成功!');
        }).fail(function() {
            alert('失敗・・');
        });

FuelPHP側では下記のようにajaxを受信です。

<?php
class Controller_Api extends Controller_Rest
{
    protected $default_format = 'json';

    public function post_hogege()
    {
        $hoge1 = Input::post('hoge1_id');
        $hoge2 = Input::post('hoge2_id');
        $hoge3 = Input::post('hoge3_id');
        return $this->response("ok", 200);
    }
}

FuelPHP側で、$_POSTの中に何も入ってなくてデータ受信できません!

原因はajaxの「contentType: 'application/json'」の記述・・。この記述がわるい!
この記述あると$POSTの中に値が入らなくてデータ取得できない!

参考ブログ:
PHP で json の POST request の body を参照するには · Yuichi Takada

「contentType: 'application/json'」の記述はいらないので削除する!
これでサーバ側で「Input::post」でデータ受信できる!

あんましFuelPHPは関係ない問題かもしれないけど、めでたしめでたし、ちゃんとできた!
以上!