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

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

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

// 変数dataはAjaxで取得したデータ

if(typeof (data) === 'string' || data instanceof String) { 
  data = JSON.parse(data); 
}

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

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