我写的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>';
?>
...全文
414 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完全自学手册PPT和源代码分来上传了,需要PPT的自己在我的资源里面查找。 1.本书1~22章所代码的运行环境 操作系统:Windows 2003、Windows XP Professional,或者Windows 2000 开发环境:Microsoft Visual Studio 2005、Microsoft Visual Studio 2003 数据库:SQL Server 2005、SQL Server 2000 Web服务器:IIS 5.1及以上版本 2.本书所光盘范例 第1章 Ajax简介以及使用的场合 HelloWorld 第一个Ajax应用程序 第2章 浏览器中的JavaScript Test4Navigator.htm User-Agent检测法 Test4Window1.htm window对象属性 test4Alert.htm 系统对话框 Test4Timeout.htm 时间间隔和暂停 Test4History.htm 浏览器历史 Test4location.htm locatio对象 第3章 XMLHttpRequest对象 3.1.3 最简单的Ajax示例 第4章 DOM基础及高级DOM技术 柳州龙腾.xml XML-无限数据传输 Test4Document.htm 访问DOM对象的相关节点 Test4Document.htm 检测节点类型 Test4Attribute.htm 节点的属性解析 get&setAttribute.htm 节点的属性解析 Test4Element.htm 操纵DOM深层节点 CreateElement.htm 创建、操作节点 get&setAttribute.htm 操纵HTML属性 Test4Table.htm Table方法 第5章 JavaScript中的继承 Test4OO.htm 什么是对象 Test4OO.htm 对象分类 TestStatic.htm 作用域、静态作用域、this关键字 Test4Factory.htm 工厂方式 test4Constract.htm 构造函数 Test4Fixed.htm 混合方式 dynamicType.htm 混合方式 Test4Extends.htm 继承的实现 Test4Call2.htm 伪装方法 Test4Call.htm Function对象的call()方法 Test4Apply.htm Function对象的apply()方法 Test4Extends.htm 使用call()方法实现继承 Test4Call2.htm apply()方法实现继承 Test4Prototype.htm 原型链继承 ExtendsExamble.htm 继承实例 第6章 错误处理 Test4Exception.htm 异常 Test4Onerror.htm onerror错误处理 Test4Onerror1.htm onerror错误处理 Test4TryCatch1.htm try catch 语法结构 Test4Throw.htm throw关键字显式抛出异常 throwException.htm 抛出自定义错误 第7章 JavaScript中的XML Test4IE XMLDOM.htm IE中的XML DOM支持 Test Firefox XMl DOm.htm Firefox中的XML DOM支持 Firefox LoadXML.htm Firefox中的XML DOM支持 XPath Example1.xml XPath Writer.xml 开发中实际使用的XML文档 Test4IE XPath.htm IE中的XPath支持 Test Firefox XMl Path.htm Firefox中的XPath支持 Example.xslt 什么是XSLT Test4IE XSLT.htm IE中的XSLT支持 View.xslt XSLT应用实例 第8章 IE event flow.htm 冒泡型事件 IE Event handler.htm IE中的事件处理函数 DOM Event handler.htm DOM事件处理监听函数 DifferenceOfIE&DOM.htm IE与DOM中event对象的共性 Test4EventType.htm 获取按键代码 CheckAlt&Shift&Ctrl.htm 检测Shift、Ctrl、Alt按键 CheckScreenX&Y.htm 获取客户端鼠标指针屏幕坐标 StopContextMenu.htm IE禁用右键菜单 IE cancel Bubble.htm IE中停止事件的多次响应 Dom stop event flow.htm Firefox中停止事件的多次响应 Test4MouseEvent.htm 鼠标事件 Test4MultMouseEvent.htm 还原鼠标事件原貌 Test4To&FromElemnt.htm IE中event对象的fromElement、toElement属性 Test4relatedElement.htm DOM标准event对象的relatedTarget属性 Test4MultKeyEvent.htm 还原键盘事件原貌 Load & Unload.htm HTML 加载事件 ReSize.htm resize事件 Test4Scoll.htm scroll事件 TopDivOnPage.html 页面顶部的对联广告浮动层 EventUntil.htm 定义跨平台事件处理对象complexEvent complexEvent.htm 跨平台事件 第9章 JavaScript如何与服务器通信 AjaxTest4Cookie 第9章贯穿示例 第10章 正则表达式 CreateRegExp.htm RegExp对象的实例化 StrRegExp.htm 使用正则表达式扩展字符串对象的方法 SpacilString.htm 使用特殊字符 StringClass.htm 字符类 quantifier.htm 量词 GroupBy.htm 分组 Reference.htm 反向引用 ChooseModel.htm 选择模式 NonReference.htm 非捕获性分组 boundary.htm 边界 Mulit.htm 多行模式 RegExpProperty.htm RegExp对象属性 StaticProperty.htm 静态属性 ValidateDate.htm 验证日期 ValidateEmail.htm 邮件地址验证 第11章 11.1.1 前台脚本与后台Ajax处理页面实现的ASP.NET Ajax应用 11.1.2 前台脚本与后台HttpHandler类实现的ASP.NET Ajax应用 11.1.3 CallBack实现ASP.NET Ajax应用 11.1.4 使用Microsoft ASP.NET Ajax控件实现Ajax应用 第12章 12.1 使用ASP.NET Ajax控件实现的页面无刷新的简单实例 第13章 AjaxGridView Ajax化的GridView AjaxChartRoom Ajax无刷新聊天室 第14章(\C05) AutoComplete AutoCompleteExtender控件的使用 Calender ReorderList控件的使用 RatingExample Rating控件的属性或方法 第15章(\C06) MyLogin ASP.NET Ajax注册登录 第16章(\C07) AddressList Ajax通讯录 第17章(\C08) LinkageList 级联菜单(使用VS 2003) 第18章(\C09) Test4Google Ajax进度条 第19章(\C10) ChatSystem Ajax 聊天室 第20章(\C11) WebQQ WebQQ示例 第21章(\C11) Thirf 电视节目预告 Thirf 翻译模块 第22章(\C11) Advertisement 内文广告系统
龙博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,787

社区成员

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

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