ブログ

phpでjsonを返すときはjson_encodeを使おう

サーバーとの疎通確認の意図もあり、phpで以下のようなjsonが返却されるようなプログラムを動作させようとしてみました。


// index.php
<?php
  echo "{'test':'OK'}";
?>
  

ただし、この場合だとうまく処理されなかったのが今回のお話。

ajaxでいざ接続!


...
$.ajax({
  url: index.php,
  type : "GET",
  dataType: 'json'
})
...
  

この場合、HTTPのステータスコードは"200"を返してくれますが、ajax側では失敗の処理が走ってしまいます。

きちんとエラーを見てみる


function(XMLHttpRequest, textStatus, errorThrown) {
  console.log("XMLHttpRequest : " + XMLHttpRequest.status);
  console.log("textStatus : " + textStatus);
  console.log("errorThrown : " + errorThrown.message);
}
  

上記のように、ajaxでエラーを受けとり、中身を見てみます。


textStatus  : parseerror
  

どうやら返り値のjsonの形式がまずいようです。

シングルクォーテーションはJSONでNG

JSONではダブルクォーテーションを使わないといけません。こんなように。


<?php
  echo '{"test":"OK"}';
?>
  

今回のプログラムでは、シングルクォーテーションを使った値をそのまま返してしまったため、ajaxが認識してくれませんでした。

ただ、これでもシングルクォーテーションとダブルクォーテーションが混在してややこしいです。

 

なので、めんどくさがらず(またやらかしそうなので。。。)、phpでjsonを返すときはjson_encodeを使いましょう(教訓)


<?php
  $arr = array('test'=>'OK');
  echo json_encode($arr);
?>
  

参考 : https://www.php.net/manual/ja/function.json-encode.php