Ajax用のXML出力の際のcontent type
勉強がてら、Ajaxを使ったサイトを作り始めました。
PHPで出力モジュールを作ってXMLを返すってのをやるんですが、
ここでちょっとはまった。
クライアント側で、
responseTextはちゃんと受け取れてるのに、responseXMLがnullになるっていう状態。
しかも、PHPの出力のhttp headerにはちゃんと「Content-type:text/xml」を指定してるのに。
(IEやfirefoxはcontent-typeをきちんと指定してあげないと、responseXMLがnullになる)
とはいえ、content-typeをjsで見てみたら、やっぱりふつーに「text/html」になってました。
でも、PHP側でheader()前に出力してるところなんて無いんですが。。。
(PHPは文字列等を出力すると、勝手にhttpヘッダーをつけてくれます)
結論としては、
出力文字コードに問題があったっぽいです。
動かしてるレンタルサーバは内部文字コードがEUC-JPで、出力はpass(自動変換なし)の設定でした。
そこで、
mb_http_output("UTF-8");
を出力しているPHPの方の頭に入れて、出力を変換するようにしてあげたら、
ちゃんとcontent-typeをクライアント側で認識できるようになりました。
→responseXMLを取れるようになりました。
mb_convert_encoding()でマルチバイトだけでもUTF-8にしとけば、
なんとかなるっしょ的な適当な考えが甘かった。
っていうか、どういう理屈だったのか、まだよくわかってないです><
アホなこと書いてたらごめんなさい><