jQuery で Unicodeエスケープされた値を含む json を処理する
郵便番号を入力して、対応する住所を表示する〜という、よくあるやつを実装しています。
ajax で直に WebAPI を呼んでいるときは問題なかったのですが、該当ページが https なのに
WebAPI は https 非対応で Mixed Content の警告が出てしまうため、間にサーバーを挟んだところ
json の中身が Unicodeエスケープされるようになって、うまく認識できなくなってしまいました。
これが、ajax から直接 WebAPI を呼んでいたときの json
{"status":200,"rows":[{"col1":"値1", "col2":"値2"}]}
ajax の部分はこんな感じ。
$.ajax({ type : 'get', url : 'XXXX?postalCode=' + postalCode }) .then( function (data) { if (data.status == "200") { …略… } else { // 失敗 } }, function () { // 失敗 } );
そして、こっちが ajax →サーバー→ WebAPI と、サーバーを経由したときの json
"{\"status\":200,\"rows\":[{\"col1\":\"\\u5024\\uff11\",\"col2\":\"\\u5024\\uff12\"]}"
色々と、エスケープされまくっている。。。
元のコードのようにただ data.status 〜としても何も取れません。
【結論】オブジェクトに変換すれば大丈夫。
function (data) {
try {
data = $.parseJSON(data); // ←これだけ!
catch (e) {
// 失敗
}
if (data.status == "200") {
…略…
} else {
// 失敗
}
Unicodeエスケープをマルチバイト文字に戻して、ダブルクォーテーションをエスケープしてる
バックスラッシュもreplaceで取って〜など、色々試しましたが、結局 parseJSON で
すべて解決しました。
結構ハマってしまった><