XML或文本声明不是在实体错误的开始 - PHP和Javascript

时间:2013-11-01 21:49:13

标签: javascript php html ajax xml


您好我正在尝试使用DOM文档将php中的xml数据转换为javascript并且它一直给我: XML或文本声明不是在实体错误开始时。(在firebug上) 我尝试将其保存到一个真正的xml文件中,并输出格式良好的xml。

我猜这个原因是xml文件顶部的空白区域。我尝试使用ob_start();和ob_end_flush();但无法做到这一点 顺便说一下,我是Ajax的新手!

JS脚本


var xh = createRequest();
var xhrObject = false;

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




function getData()
{   

    if ((xh.readyState == 4) &&(xh.status == 200))
        {   
            alert("hi");
            var serverResponse = xh.responseXML;
            var header = serverResponse.getElementsByTagName("good");

            var spantag = document.getElementById("sp");
            var x;
            spantag.innerHTML = "";
            x = "<table cellpadding='1' cellspacing='6' border='0'>";
            x += "<tr><td>ID</td><td>price</td><td>quantity</td><td>Total</td><td>Remove</td></tr>";
            for (i=0; i<header.length; i++)
            {  
                var id =  header[i].getElementsByTagName("ID")[0].childNodes[0].nodeValue;
                var price =  header[i].getElementsByTagName("price")[0].childNodes[0].nodeValue;
                var qty =  header[i].getElementsByTagName("quantity")[0].childNodes[0].nodeValue;
                var total =  header[i].getElementsByTagName("total")[0].childNodes[0].nodeValue;


                if(qty=="0")
                {
                    continue;
                }
                x += "<tr>"
                + "<td>" + id + "</td>"
                + "<td>" + price + "</td>"
                + "<td>" + qty + "</td>"
                + "<td>" + total + "</td>"
                + "<td>" + "<a href='#' onclick='AddRemoveItem(\"Remove\","+id+");'>Remove Item</a>" + "</td>"
                + "</tr>";

            }
            x += "</table>";
            if (header.length != 0)
                spantag.innerHTML = x;
        }
}

PHP code

function toXml($shop_goods)
    {   
        $doc = new DomDocument();   

        $goods = $doc->createElement('goods');
        $goods = $doc->appendChild($goods);

        foreach ($shop_goods as $Item => $ItemName)
        { 

            $good = $doc->createElement('good');
            $good = $goods->appendChild($good);


            $title = $doc->createElement('ID'); 
            $title = $good->appendChild($title);
            $value = $doc->createTextNode($Item);
            $value = $title->appendChild($value);

            $price = $doc->createElement('price');
            $price = $good->appendChild($price);
            $value3 = $doc->createTextNode($ItemName["price"]);
            $value3 = $price->appendChild($value3);

            $quantity = $doc->createElement('quantity');
            $quantity = $good->appendChild($quantity);
            $value2 = $doc->createTextNode($ItemName["qty"]);
            $value2 = $quantity->appendChild($value2);

            $total = $doc->createElement('total');
            $total = $good->appendChild($total);
            $value3 = $doc->createTextNode($ItemName["total"]);
            $value3 = $total->appendChild($value3);


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


        //echo("<br>----- DATA RECOREDED!!! ----");


        return $strXml;

    }

1 个答案:

答案 0 :(得分:1)

正如其他人所说,这可能是编码问题。

检查代码中的Xml字节顺序标记。

检查文档是否返回正确的mime类型。

不确定您的约束,但您是否考虑将数据序列化为Json格式。在浏览器中使用起来要容易得多。

最后考虑使用像JQuery这样的库来处理你的ajax请求,更容易实现跨浏览器的兼容性。