当我请求XML时,PHP / AJAX不断返回null

时间:2015-06-29 22:30:07

标签: javascript php ajax

我在javascript中有这个问题。

function showItems(type)
{
    var xmlhttp = new XMLHttpRequest(); //create object
    var call = "getitems";

        xmlhttp.onreadystatechange = function() 
        {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
            {
                response = xmlhttp.responseXML;
                alert(response);
            }
        }


xmlhttp.open("GET", "scripts/php/ajaxCalls.php?call=" + call + "&type=" + type, true);
xmlhttp.send();
}

这是我在PHP文件中获得的脚本

//now use the gathered item ids to return items in proper XML back to javascript.
    $xml = "<?xml version='1.0' encoding='UTF-8'?><items>";
    $numberOfItems = count($items);

    for($i=0; $i<$numberOfItems; $i++)
    {
        $xml .= "<ITEMS>";
        $itemId[$i] = $items[$i];
        $xml .= "<ID>".$itemId[$i]."</ID>";
        $itemPic[$i] = $itemList[(int)$itemId[$i]][2];
        $xml .= "<PICTURE>".$itemPic[$i]."</PICTURE>";
        $xml .= "</item>";
    }

    $xml .= "</ITEMS>";

    echo $xml;

我的问题是当我将reponse = xmlhttp.responseXML更改为xmlhttp.responseText时。响应很好我得到了我想要的字符串,它看起来像XML。但!当我使用xmlhttp.responseXML时,我经常得到NULL作为返回值。我错过了什么?

1 个答案:

答案 0 :(得分:1)

好吧,我可以告诉你,你的XML不太可能被任何兼容的DOM解析器解析,因为你的<items>节点在顶部是小写,而是由大写<ITEMS>关闭。 / p>

According to the manual

  

XMLHttpRequest.responseXML返回包含的文档   对请求的响应,如果请求不成功,则返回null   尚未发送,或无法解析为XML或HTML 。回应是   解析就好像是text / xml流一样。设置responseType时   到“文档”并且请求已经异步进行了   响应被解析为text / html流。

此外,您可能希望发送正确的Content-type标头以及响应,以确保客户端正确接受它或强制XMLHttpRequest对象通过overrideMimeType()方法将其解析为XML。 / p>