2013-04-03 54 views
2

似乎我的JavaScript沒有拿起我的PHP發回一個XML文檔。 PHP代碼:以上Javascript無法解釋返回的xml

$domtree = new DOMDocument('1.0', 'UTF-8'); 

/* append it to the document created */ 
$xmlRoot = $domtree->appendChild($domtree->createElement("root")); 

foreach (glob('./img/photos/*.*') as $filename) { 
    //echo $filename; 
    $xmlRoot->appendChild($domtree->createElement("image",$filename)); 
} 

/* get the xml printed */ 
echo $domtree->saveXML(); 

代碼的輸出結果如下:

<?xml version="1.0" encoding="UTF-8"?> 
<root><image>./img/photos/2012-02-26 17.02.12.jpg</image> 
<image>./img/photos/2012-03-09 08.21.48.jpg</image> 
<image>./img/photos/2012-07-21 14.09.39.jpg</image> 
<image>./img/photos/2012-07-25 15.25.17.jpg</image> 
<image>./img/photos/2012-08-04 17.54.38.jpg</image> 
<image>./img/photos/2012-08-04 23.36.30.jpg</image> 
<image>./img/photos/2012-08-06 06.08.43.jpg</image> 
<image>./img/photos/2012-08-07 20.57.34.jpg</image> 
<image>./img/photos/2012-08-09 20.40.11.jpg</image> 
<image>./img/photos/2012-08-25 20.54.05.jpg</image> 
<image>./img/photos/2012-09-07 11.19.50.jpg</image> 
<image>./img/photos/2012-09-08 15.53.27.jpg</image> 
<image>./img/photos/2013-01-30 19.19.16.jpg</image> 
<image>./img/photos/2013-01-31 09.48.39.jpg</image></root> 

與AJAX調用這個,當我打電話AJAXRequest.responseXML我得空回來。

編輯:AJAX請求代碼:

+0

什麼是AJAX代碼?也直接調用它回寫什麼是PHP的輸出,所以我們可以看到什麼JavaScript試圖解析。 – PhoneixS

+0

查看答案[here](http://stackoverflow.com/questions/1013582/ajax-responsexml-errors) – 2013-04-03 16:07:58

+0

您的PHP腳本是否返回了正確的「Content-Type」標頭?有關更多信息,請參見http://stackoverflow.com/a/3272572/156755 – Basic

回答

0

如果你不使用任何第三方庫,嘗試這種代碼段(根據您的要求進行修改)

var request = window.ActiveXObject ? 
     new ActiveXObject('Microsoft.XMLHTTP') : 
     new XMLHttpRequest; 

    request.onreadystatechange = function() { 
    if (request.readyState == 4) { 
     request.onreadystatechange = doNothing; 
     callback(request.responseText, request.status); 
    } 
    }; 

    request.open('GET', url, true); 
    request.send(null); 

注意它正在使用request.responseText,如果您將標題中的內容類型添加爲header("Content-type: text/xml");,它肯定會得到返回的xml

UPDATE

解析XML時,可以使用下面的代碼片段:

function parseXml(str) { 
    if (window.ActiveXObject) { 
    var doc = new ActiveXObject('Microsoft.XMLDOM'); 
    doc.loadXML(str); 
    return doc; 
    } else if (window.DOMParser) { 
    return (new DOMParser).parseFromString(str, 'text/xml'); 
    } 
} 

function doNothing() {} //use this for some processing at run time 
+0

任何不使用jQuery的原因,並避免瀏覽器自己嗅探?此外,你不是解析XML到一個可用的格式,只是用字符串回撥 – Basic

+0

是的jQuery是最好的使用在這裏..但我相信@jaysee沒有使用它,所以它會添加另一個學習曲線嗎?是的,正在解析XML我只是建議相關的代碼 – gaurav

+0

只有我不使用jQuery的原因是我不知道它。此外,我寧願避免任何平臺特定的代碼(ActiveX是僅適用於Windows,對吧?) – JaySee

1

嘗試發送PHP中的內容類型,以便AJAX知道這是一個XML和解析它(請記住,這必須是任何echo之前完成):

header("Content-Type: text/xml"); 

這也可以直接在JavaScript中被迫(與overrideMimeType()),但PHP是更好地完成。