我正在尝试我的第一个AJAX并且我的xml接收功能有问题。 我提醒responseText,我可以看到从我的服务器返回的xml,但是当我尝试获取responseXML时,我得到null并且错误。
这是构建我的xml
的php函数 header('Content-type: application/xml');
echo("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
echo("<results>");
echo("<table><![CDATA[tablereererere]]></table>");
//echo("<ratedTable>".$_POST['ratedTable']."</ratedTable>\n");
//echo("<table>".$_POST['table']."</table>\n");
//echo("<post_id>".$_POST['post_id']."</post_id>\n");
//echo("<user_id>".$_POST['user_id']."</user_id>\n");
//echo("<rating>".$_POST['rating']."</rating>\n");
echo("</results>");
这是我的javascript函数,它处理返回的xml
function ajaxReceiver(http_request) {
//this function continues to run until a result is returned and then it creates the new div
if(http_request.readyState == 4) {
response_xml = http_request.responseXML;
response_text = http_request.responseText;
alert(response_text);
alert(response_xml.getElementsByTagName("table")[0].textContent);
//document.getElementById('floatingNotification').innerHTML = response_text;
// alert(http_request.responseXML.getElementsByTagName("table")[0].textContent);
//ratedTable = responseXML.getElementsByTagName("table").value;
//alert(ratedTable);
//message = response.getElementsByTagName('table')[0].textContent;
//alert(message);
//alert(message);
//this response contains the xml document that was returned by the php function.You can get any values out of the xml document and
//use javascript dom to manipulate the contents on the page
}
}
答案 0 :(得分:2)
可能是因为,即使您正确设置了内容类型,也需要在回复的顶部添加<xml
标记。此外,您没有正确关闭最后一个标签。这应该有效:
echo("<?xml version='1.0'?>");
echo("<results>");
echo("<ratedTable>".$_POST['ratedTable']."</ratedTable>");
echo("<table>".$_POST['table']."</table>");
echo("<post_id>".$_POST['post_id']."</post_id>");
echo("<user_id>".$_POST['user_id']."</user_id>");
echo("<rating>".$_POST['rating']."</rating>");
echo("<message>$message</message>");
echo("</results>");
有关如何定义XML的更多信息:http://www.w3.org/TR/REC-xml/#sec-prolog-dtd
答案 1 :(得分:1)
您正在不正确地关闭父节点(</results>
而不是<results/>
),您应该(在清理它之后)将所有POSTDATA包装在<![CDATA[...]]>
标签中以确保安全。确保它也是UTF8编码(参见utf8_encode()
)
编辑:以及wajiw在开头就<?xml version="1.0" encoding="UTF-8" ?>
标记说了什么。
<?xml version="1.0" encoding="UTF-8" ?>
<myNode>
<myData><![CDATA[
Now I just throw in my data, for fun and profit!
This way I can use special, reserved characters like <, > and &!
]]></myData>
</myNode>
为什么不给Content-Type: text/xml
,而不是application/xml
,去吧?
答案 2 :(得分:1)
答案是将函数“open()”中的异步属性设置为false。 像这样:
ajaxObject.open("POST", "my_XML_Generator.php", false);
ajaxObject.setRequestHeader("Content-type", "text/xml");
ajaxObject.send();
答案 3 :(得分:0)
我遇到了同样的问题,直到我把结果放到子节点中才解决它,例如
header("Content-Type: text/xml; charset=utf-8");
echo("<?xml version='1.0' encoding='utf-8'?>\n");
echo("<summary>$summary</summary>\n");
echo("<content>$content</content>\n");
由于一些奇怪的原因对我不起作用,但这样做:
header("Content-Type: text/xml; charset=utf-8");
echo("<?xml version='1.0' encoding='utf-8'?>\n");
echo("<page>\n");
echo(" <summary>$summary</summary>\n");
echo(" <content>$content</content>\n");
echo("</page>\n");
检索答案的代码是
function retrieveRequest(title)
{
if (_xmlRequest.readyState == 4 && _xmlRequest.status == 200)
{
var xmlResponse = _xmlRequest.responseXML;
_divSummary.innerHTML = xmlResponse.getElementsByTagName("summary")[0].textContent;
_divContent.innerHTML = xmlResponse.getElementsByTagName("content")[0].textContent;
}
}
答案 4 :(得分:0)
我的错误发生在我们的团队一次,我花了很长时间才意识到问题出在我们从服务器返回的XML数据中。特别是,生成返回XML字符串的PHP脚本是罪魁祸首。
我的解决方案是从PHP脚本开头删除任何空格。我的意思是需要从脚本的开头删除任何空格,新行和/或制表符,以便脚本中的第一件事就是<?php
标记本身。原来,<?PHP
标签不是我PHP脚本第一行的第一件事;不知何故,我在第二行开始我的代码,第一个脚本行只是一个空行。
这让我很生气,我花了一些时间才弄清楚这一点,所以我希望其他人可以从这个解决方案中受益。如果所有其他方法都失败了,它会非常简单易行。