我写的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>';
?>
...全文
424 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>
龙博AJAX框架是跨浏览器的JavaScript开放源代码框架集,是构建富web应用的利器. 龙博AJAX框架 4.0 主要更新如下: 主要更改是Ajax,相应的后台和DataBinder,可以直接绑定JSON/XML/SOAP远程服务,由于与以前不兼容所以升级了版本。 在LGPL许可下, 可免费应用于个人或商业目的. 其主要特点为 • 富客户端技术, 可以和任意后端技术(包括但不限于php, .Net, Java, python)或静态的HTML页面. • 包含40多个图形界面控件, 例如标签(Tabs),窗口对话框(Dialog),树型表格(TreeGrid),时间线(TimeLine)等等. • 多浏览器兼容, 包括IE6 , firefox1.5 , opera9 , safari3 和 Google Chrome. • 大量的API文档 和示例. • 不断更新的代码片段供程序员参考. • 极为方便的所见即所得的界面编辑器. Web界面使用拖拽轻松搞定,大大降低开发时间. • 带有代码折叠、代码提示和API智能提示功能的在线编辑器. • 和其他Ajax框架,如jQuery, prototype, mootools充分兼容. • 源代码开放。在LGPL许可下, 可免费应用于个人或商业目的. 如何安装 1.在安装之前,你需要在你的机器上安装PHP5.2 和Apache2.0 服务器。 如果你是Windows用户,下载wamp集成安装包。该包提供一键式的安装,可以将龙博AJAX框架需要运行的所有程序安装好 2.将该压缩包解压放到Apache的www目录中,例如/longboo/。 3.使用浏览器浏览index.html,龙博AJAX框架支持firefox1.5 IE6 opera9 safari3 Chrome等浏览器
龙博AJAX框架是跨浏览器的javascript开放源代码框架集,是构建富web应用的利器.龙博AJAX框架 4.0 主要更新如下: 主要更改是Ajax,相应的后台和DataBinder,可以直接绑定JSON/XML/SOAP远程服务,由于与以前不兼容所以升级了版本。在LGPL许可下, 可免费应用于个人或商业目的. 其主要特点为 • 富客户端技术, 可以和任意后端技术(包括但不限于php, .Net, Java, python)或静态的HTML页面. • 包含40多个图形界面控件, 例如标签(Tabs),窗口对话框(Dialog),树型表格(TreeGrid),时间线(TimeLine)等等. • 多浏览器兼容, 包括IE6+, firefox1.5+, opera9+, safari3+ 和 Google Chrome. • 大量的API文档 和示例. • 不断更新的代码片段供程序员参考. • 极为方便的所见即所得的界面编辑器. Web界面使用拖拽轻松搞定,大大降低开发时间. • 带有代码折叠、代码提示和API智能提示功能的在线编辑器. • 和其他Ajax框架,如jQuery, prototype, mootools充分兼容. • 源代码开放。在LGPL许可下, 可免费应用于个人或商业目的.如何安装 1.在安装之前,你需要在你的机器上安装PHP5.2+和Apache2.0+服务器。 如果你是Windows用户,下载wamp集成安装包。该包提供一键式的安装,可以将龙博AJAX框架需要运行的所有程序安装好 2.将该压缩包解压放到Apache的www目录中,例如/longboo/。 3.使用浏览器浏览index.html,龙博AJAX框架支持firefox1.5+ IE6+ opera9+ safari3+ Chrome等浏览器

52,783

社区成员

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

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