先日、仕事で扱っているサイトにて、Ajaxで取得したJSONデータが環境によって文字列として取得される問題が発生した。

そのため、ローカル環境では取得したデータをオブジェクトとしてそのまま扱うことができたが、本番環境では文字列に対しobj.nameのようにアクセスしていたためエラーを起こしていた。

そこで施した対策がこちら。

1
2
3
4
5
// 変数dataはAjaxで取得したデータ
 
if(typeof (data) === 'string' || data instanceof String) {
  data = JSON.parse(data);
}

if文で取得したデータが文字列かどうかをチェックし、文字列の場合はJSON.parseを使ってオブジェクトに変換する。

これで今回のような特殊なケースにおいても正常動作できるようになった。