cakePHPとjQueryでXMLデータを受信する
cakePHPからjQueryを使ってXMLを取得するのだけど、どうもうまくXMLとして読み込めない。
もしかして出力しているXML生成プログラムののヘッダに問題があるのかと思ってHTTPヘッダをみると
Content-Type:text/html; charset=utf8
になっている。
あれ・・・?アクションの中で
<? header('Content-Type: application/xml');
としていたのに。どこかでContent-Typeが上書きされているらしい。
MT Systems - CakePHP AjaxでJSONデータの出力の仕方とcontent-typeについて
を参考にコントローラにリクエストハンドラコンポーネントを追加して、拡張子で判別するように変えてみた。
でもContent-Typeは変らない。
app/views/layouts/xml/default.ctpにヘッダ出力をいれてやっとContent-Typeが変った。
<?php header('Content-Type: application/xml'); echo $xml->header();//XML宣言を出力 echo $content_for_layout;
フレームワークは難しいな。こんなとこ詰まるようなところじゃないのに。アクションのbefore_filterにいれた
<? function beforeFilter() { if($this->action=='ajax_search'){ Configure::write('debug',0); $this->RequestHandler->setContent('xml'); $this->RequestHandler->respondAs('Content-Type: application/xml'); } }
respondAsがなぜ効かなかったのか、調べる気力もない。
とにかくこれで、jQueryを使ってXMLとしてデータ受信できるだろうか
jQuery.ajax({ url : "/concerns/ajax_search/<?= $concern['Concern']['id'] ?>/type:mutter.xml", type : "get", success : function(data){ console.log(data.getElementsByTagName('target')); } });
うまくいけた!