ajaxで「false」の値を送信してもPHPでは「true」と判定される
クライアント側とサーバ側の「Boolean」の値に注意してください。
例えば、下記のようにjquery ajaxでクライアントからサーバにBooleanの値を送信します。
var name="hogege"; var is_dead = false; //★falseの値をセット $.ajax({ url : "./post.php", type : "POST", data : {'name':name, 'is_dead':is_dead}, dataType : 'json' })
このメッセージをサーバ側PHPで受信して評価します。
$is_dead = $_POST['is_dead']; if ($is_dead == true){ $logger->debug("dead!"); }else{ $logger->debug("not dead!"); }
このとき「$is_dead」は「false」ではなくて「true」と判別されてしまいます。
ajaxのメッセージには「"true"」「"false"」という文字列が入っていて、PHP側は"true"という文字列も"false"という文字列も、共に真と評価してしまいます。
たとえPHP側で下記のようにBoolean型にキャストしても無駄です。結局これも真と評価されてしまいます。
$is_dead = (Boolean)$_POST['is_dead'];
ちゃんと評価するためには、おとなしく"true"や"false"の文字列が入っているかどうかをチェックしましょう。すなわち下記のようにするのが良さそうです。
$is_dead = $_POST['is_dead']; if ($is_dead == "true"){ $logger->debug("dead!"); }else{ $logger->debug("not dead!"); }