IEにおけるjquery.ajax()

久々にAjaxな画面を書いたらちょっと壁に当ったのでメモ。



当たった壁というのは、タイトルどおりJquery.ajax()を使い
レスポンスにJSONデータを想定した際に
FF3、Safari4ChromeはOKなのにIE7、8だと正常に動かない件。
厳密にはerrorで指定したコールバック関数が呼ばれてしまう。
他のブラウザだとsuccessで指定したコールバック関数が動くのに。



ajax()にはオプション引数のうち、dataTypeというパラメーターがあり、
jsonjsonp、textなどを指定できる。
これを指定するとレスポンスに対する解釈をしてくれて
データの扱いが便利になるという代物。
いろいろ試してみたがIE8標準のデバッガ「開発者ツール」には
相変わらずparseerrorの文字が。
つまり、それ以前の問題っぽい。





JqueryにおけるAjaxを解説しているサイトを調べて回ったところ、
結局レスポンスを返すサーバー側が原因と判明。
今回はサーバー側はPHPになっているのだが、
IEJSONデータをレスポンスとして判別させるためには
Content-Typeにapplication/jsonを指定しなければならないらしい。
XMLHttpRequestは本来XML向けだし仕方ないか。
というかJquery側のバグじゃないのか・・・



というわけでPHPのソースに
header('Content-Type: application/json;charset=UTF-8');
を追加したら難なく解決。