2009年7月26日 星期日

PHP 寫XML,responseXML一直為null

最近在玩jQuery,碰到了一些有趣的問題
當我用$.ajax像PHP送出要求一個XML文件的時候
照道理他回傳的是一個XMLHttpRequest,然後可以用他得到XML文本

var html = $.ajax({
url: "ajaxOutput.php",
async: false
,type: "GET"
}
).responseXML;

但是卻發生了responseXML總是為null的狀況,後來查了一下HTTP封包
他似乎被解讀成HTML文本 所以無法轉換
因為responseText可以正確抓到值

後來看了一下的我PHP程式碼

<?php
echo '<?xml version="1.0"?>';
echo '<book>';
echo 'jQuery';
echo '</book>';
?>

沒什麼問題,但是卻沒辦法讀取,找了一些範例好像也都是這樣寫
讀純xml也很正常


var html = $.ajax({
url: "test.xml",
async: false
,type: "GET"
}
).responseXML;


那倒底問題是出在哪裡
後來又看了一下jQuery文件

dataType (String) : (預設值:智能判斷xml或者html)預期服務器返回的資料類型。如果不指定,jQuery 將自動根據 HTTP 包 MIME 資訊返回 responseXML 或 responseText,並作為回調函數參數傳遞,可用值:

這樣就我就明白了,他會根據MIME來判斷這份文件是什麼類型
也就是必須透過Content-type告訴AJAX他是什麼東西,因此我必須告訴他我是一個XML文件
因此我只要設定一下header就能解決了 如下

<?php
header('Content-type: application/xml');
echo '<?xml version="1.0"?>';
echo '<book>';
echo 'jQuery';
echo '</book>';
?>

沒有留言: