我写的php+ajax+xml小应用在firefox上运行不正确,在IE上运行良好(附源代码),请帮帮我!

yeyuboy 2006-04-18 05:02:34
主要问题是在firefox下,读取响应xmlObj.responseXML时不正确:
xmlObj.responseXML.xml未定义;
xmlObj.responseXML.getElementsByTagName("field_id")[0].nodeTypedValue未定义;

alert(xmlObj.responseText)后,在IE下和firefox下内容都相同。

难道是我访问XMLDom的方法有问题(我是参考《Microsoft XML 4.0 Parser SDK》文档的)?
另,发现以下语法访问field_id结点时可以成功(其它结点不能成功):
xmlObj.responseXML.getElementsByTagName("field_id")[0].firstChild.nodeValue;

谢谢!

--------------------------------myinfo.html源代码-------------------------------------
<html>
<script language="JavaScript" type="text/JavaScript">
function updateInfo()
{
/*!
ajax
*/
if (window.XMLHttpRequest)
xmlObj = new XMLHttpRequest();
else if (window.ActiveXObject)
xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
else
return false;

var strURL = "myinfo.php";
xmlObj.open("GET",strURL,false);
xmlObj.send(null);
var responseXML = xmlObj.responseXML;

document.getElementById("field_id").value =responseXML.getElementsByTagName("field_id")[0].nodeTypedValue;
document.getElementById("field_name").value =responseXML.getElementsByTagName("field_name")[0].nodeTypedValue;
document.getElementById("field_age").value =responseXML.getElementsByTagName("field_age")[0].nodeTypedValue;
}
</script>
<form name="frmInfo" method="post" action="#">
编号:<input name="field_id" type="text" id="field_id" size="50" maxlength="255"><br>
姓名:<input name="field_name" type="text" id="field_name" size="50" maxlength="255"><br>
年龄:<input name="field_age" type="text" id="field_age" size="50" maxlength="255"><br>
<input name="getInfoByAjax" type="button" id="getInfoByAjax" value="do" onClick="updateInfo();">
<input name="gebtnClear" type="reset" id="gebtnClear" value="clear" onClick="updateInfo();">
</form>
</html>

-----------------------------------myinfo.php-------------------------------
<?php
header('Content-Type: text/xml');
$arrInfo = array('id'=>'1', 'name'=>'txf', 'age'=>'23');
echo "<?xml version='1.0' encoding='GB2312' ?>";
echo '<record>';
foreach($arrInfo as $key=>$value)
echo "<field_$key>$value</field_$key>";
echo '</record>';
?>
...全文
406 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eilien 2006-10-27
  • 打赏
  • 举报
回复
mark
fason 2006-04-21
  • 打赏
  • 举报
回复
firefox没有.xml属性,用dom操作就行了.
ps: element是没有nodeValue属性,text节点有,即它的文本内容
yeyuboy 2006-04-21
  • 打赏
  • 举报
回复
你们说得很对,我还一直以为只有以<tag>*</tag>才算个node呢。
看来搞web还得以w3c为标准,ms的某些东东还是用在windows上比较好。
shenjf2000 2006-04-19
  • 打赏
  • 举报
回复
取得结点的名称可通过以下语句:subNodes.item(i).nodeName; ------很直观
而取得结点的值却要通过以下语句:subNodes.item(i).firstChild.nodeValue; ------为什么要加个firstChild?
我想也许是你没有将将nodeName和nodeValue搞清楚。
对于element类型的DOM node来说,nodevalue是null。比如说
<div>hello</div>
对于div这个 DOM node来说它的nodeName是div但是它的nodevalue并不是hello,相反hello是一个text node(对于text类似的node来说它的nodevalue是它本身),它是div这个node的子节点,因此你需要用firstChild.nodevalue来取这个div标签中的文字内容。

详细的你可以参照w3c关于DOM的spec,很容易看明白的。
yeyuboy 2006-04-18
  • 打赏
  • 举报
回复
我自已把它改得可以正确运行了,不过有一个javascript操作xmldom的语法有点不明:
取得结点的名称可通过以下语句:subNodes.item(i).nodeName; ------很直观
而取得结点的值却要通过以下语句:subNodes.item(i).firstChild.nodeValue; ------为什么要加个firstChild?

-------------------------myinfo.html---------------------------------
<html>
<script language="JavaScript" type="text/JavaScript">
function updateInfo()
{
/*!
ajax
*/
if (window.XMLHttpRequest)
xmlObj = new XMLHttpRequest();
else if (window.ActiveXObject)
xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
else
return false;

var strURL = "myinfo.php";
xmlObj.open("GET",strURL,false);
xmlObj.send(null);
if(xmlObj.responseXML)
{
var rootNode = xmlObj.responseXML.documentElement;
if(rootNode.nodeName != 'record')
return;

var subNodes = rootNode.childNodes;
if(subNodes)
{
for (i=0; i<subNodes.length; ++i)
{
var ui = document.getElementById(subNodes.item(i).nodeName);
if(ui)
ui.value =subNodes.item(i).firstChild.nodeValue; /*?*/
}
}
}
}
</script>
<form name="frmInfo" method="post" action="#">
编号:<input name="field_id" type="text" id="field_id" size="50" maxlength="255"><br>
姓名:<input name="field_name" type="text" id="field_name" size="50" maxlength="255"><br>
年龄:<input name="field_age" type="text" id="field_age" size="50" maxlength="255"><br>
<input name="getInfoByAjax" type="button" id="getInfoByAjax" value="do" onClick="updateInfo();">
<input name="gebtnClear" type="reset" id="gebtnClear" value="clear" onClick="updateInfo();">
</form>
</html>

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧