2015-10-19 227 views
1

我試圖從服務器端(PHP)檢索XML文件,然後將其發送到客戶端(JavaScript)。我遇到的問題是responseXML一直返回null。但是,如果我將其更改爲responseText,它將返回字符串中的xml文件,這樣可以告訴我.js可以從服務器端接收xml文件。AJAX:responseXML返回null但是ResponseText返回XML作爲字符串


cart.js

if (window.XMLHttpRequest) 
{ 
    xHRObject = new XMLHttpRequest(); 
} 

else if (window.ActiveXObject) 
{ 
    xHRObject = new ActiveXObject("Microsoft.XMLHTTP"); 
} 

function loadDoc() 
{ 

    xHRObject.open("GET", "cart.php", true); 


    xHRObject.onreadystatechange = function() 
    {  
    if (xHRObject.readyState == 4 && xHRObject.status == 200) 
    {   
    myFunction(xHRObject); 
    } 

    } 

    xHRObject.send(); 
} 

function myFunction(xml) 
{ 
    var xmlDoc = xml.responseXML; 

    alert(xmlDoc); 

... 

} 

cart.php

<?php 

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

$xmlFile = "cart.xml"; 

    $doc = new DOMDocument(); 
    $doc->load($xmlFile); 

    $strXml = $doc->saveXML(); 
    echo $strXml; 


?> 

希望這裏有人可以幫助我,因爲我已經在網上搜索這個問題,但找不到一個辦法。我也嘗試解析responseText:

var parser = new DOMParser(); 
var xmlDoc = parser.parseFromString(XHR.responseText, "text/xml"); 

但它永遠不能返回節點。

任何幫助將不勝感激!

謝謝

解決方案:有空白行中的PHP文件

+1

是否有理由不使用[jquery](http://api.jquery.com/jquery.ajax/)等知名庫來處理ajax請求? – Jan

+1

顯然,響應不能被解析爲XML。檢查腳本中的任何額外輸出。 – hindmost

+0

@最後的omg,你是對的。我的php文件在頂部有一個空行(在<?php之前)。謝謝!!我花了幾個小時,並且你已經度過了一天 – WonderfulWonder

回答

0

頂部的問題是,PHP文件必須在頂部有一個空行。必須將其刪除,以免打印出額外(不必要的)內容。