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'));
	}
});

うまくいけた!