0

嗨,我正在尝试使用 DOM 文档将 xml 数据从 php 获取到 javascript,它一直给我:XML or text declaration not at start of entity error .(on 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;

    }
4

1 回答 1

1

正如其他人所指出的,这可能是一个编码问题。

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

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

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

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

于 2013-11-01T22:14:25.830 回答