Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML或文本声明不在实体错误的开头-PHP和Javascript_Javascript_Php_Html_Ajax_Xml - Fatal编程技术网

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

XML或文本声明不在实体错误的开头-PHP和Javascript,javascript,php,html,ajax,xml,Javascript,Php,Html,Ajax,Xml,您好,我正在尝试使用DOM文档从php获取xml数据到javascript,它不断地给我:xml或文本声明不在实体错误的开头(关于firebug) 我尝试将它保存到一个真正的xml文件中,它输出一个格式良好的xml 我想这是因为xml文件顶部有空白。我尝试使用ob_start();和ob_end_flush();但是没法让它工作 顺便说一句,我是阿贾克斯新手 JS脚本 var xh=createRequest(); var xhrObject=false; if(window.XMLHttpR

您好,我正在尝试使用DOM文档从php获取xml数据到javascript,它不断地给我:xml或文本声明不在实体错误的开头(关于firebug) 我尝试将它保存到一个真正的xml文件中,它输出一个格式良好的xml

我想这是因为xml文件顶部有空白。我尝试使用ob_start();和ob_end_flush();但是没法让它工作 顺便说一句,我是阿贾克斯新手

JS脚本


var xh=createRequest();
var xhrObject=false;
if(window.XMLHttpRequest)
{ 
xHRObject=newXMLHttpRequest();
}
else if(window.ActiveXObject)
{ 
xHRObject=newActiveXObject(“Microsoft.XMLHTTP”);
}
函数getData()
{   
如果((xh.readyState==4)和&(xh.status==200))
{   
警报(“hi”);
var serverResponse=xh.responseXML;
var header=serverResponse.getElementsByTagName(“好”);
var spantag=document.getElementById(“sp”);
var x;
spantag.innerHTML=“”;
x=“”;
x+=“IDpricequantityTotalRemove”;
对于(i=0;icreateElement(“货物”);
$goods=$doc->appendChild($goods);
foreach($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();
//回声(
----数据记录!!!----); 返回$strXml; }
正如其他人所指出的,这可能是一个编码问题

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

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

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


最后考虑使用像jQuery这样的库来处理Ajax请求,更容易跨浏览器兼容。

可能是一个编码问题。您的服务器是否在UTF-8(或任何其他多字节编码)中发送文档??如果是,请确保没有字节顺序标记。检查是否有xml以外的响应。还可以尝试在响应/echo之前将php中的标题内容类型设置为text/xml。有关于如何删除字节顺序标记的建议吗?@Ayesha Amarasinghe:我的建议是,首先不要创建它,这样就不需要删除它。您验证了吗你有一个BOM表吗?并不是说你做得太多。BOM表可以用删除。谢谢你的建议。我可以成功保存所有其他xml文件,但这次不行!我是新手,不知道如何检查文档是否返回正确的mime类型和内容。。。
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;

    }