`
Kenny.Lee
  • 浏览: 511266 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

解决responseXML为空的问题及TIMER的使用

阅读更多
    在使用AJAX请求的过程中,大家也许接触多种数据解析,今天算又挑战了一下自己,服务端使用XML封装数据。

    相对比纯String,XML的格式可以清晰表达多更多的关系。而相对于JSON,XML字体会复杂和臃肿多了,但JSON的使用要求相对比较高些,而操作XML的话还更为简单(用JavaScript DOM的话就没问题了)。

    使用建议,视情况而定,选择自己觉得适合的数据格式。

    关于String
    数据量少的话,当然Stirng最快捷简单了,虽然也许需要分割成那烦人的数组,但对比起要封装XML和JSON数据要简单的多。虽然目前XML和JSON的工具类也不少了,但便捷上还是有一定差距的。

    关于JSON
    个人比较喜欢的数据类型,把它看成一个数据就可以了。而随着JavaScript的framework的强大,解析成JSON对象越来越简单了,并且安全性也帮我们验证完毕了,强大的framework们。使用JSON,你将非常简单的把服务端的BEAN转移到JavaScript之上。但目前还是要看使用场合的,渐渐的多人用起来吧。

    关于XML
    老前辈了,无论JSON怎么流行,XML也不会退出历史舞台的,这点可以肯定的说。也不用我多阐述了。并且它除了比较臃肿和转成JavaScript的BEAN对象(OO中毒的关系)比较麻烦的之外,没什么令人讨厌的地方。还有相对于JSON来说,易读性还觉得优势。

    当然封装JSON和XML信息体之前必须注意严谨的格式和非法字符的处理。

    言归正传。

    想使用responseXML获取XML document对象的话必须注意以下几点。

    1、服务端返回的XML格式要确保有效,多使用print等调试吧。

    2、确保respnse的信息体(ContentType)内容为"text/xml"

    很多人都不知道有这点,所以造成的后果是获取到的的数据则仅仅是一个XML格式的String,而不是一个XML文档对象。当然也可以把String再解析加载成XML,但就麻烦多了,并且String转成XML对象的方法也存在浏览器兼容性问题。

    3、如果以上两点确定没问题的情况下,先尝试用responseText调试。看看内容是否如你所愿。

    如果以上都确保无误的,但使用request.responseXML的时候,能获取到object对象,但查找不了任何节点的话(childNodes为0),可以断定95%是解析XML的问题了。

    查看response消息体的方法也可以使用以下方法

   
alert(request.getAllResponseHeaders()); 


    使用浏览器进行对返回的XML数据调试

    使用IE和firefox直接打开XML字符串查看调试结果。推荐FireFox,因为更加严谨一些,IE的话很多时候都产生错觉,因为容错比较厉害,看IE解析HTML代码就知道了。

    一般的,使用firefox打开后能正常显示内容的话不会有问题的了。

    小心使用 <?xml version="1.0" encoding="utf-8"?>

    在通常情况下,我们也许为了规范而在编写XML内容时,在内容顶端上声明类似
<?xml version="1.0" encoding="utf-8"?>
的字符串以让识别为XML格式,并且指定解析编码格式。(这里说类似是因为不一定所有人都使用utf-8编码)

    其实大家也有发现,就算这样声明了,对编码不会有任何的帮助,但IE打开的时候还是可以直接的把内容识别为XML,不然会以默认的格式。

但今天我遇到的问题就因为因为声明了这个报头所引起的,是firefox查看XML内容时,firefox老大指出的。使用IE能正常访问,并且responseText也正常。然后我把那一串报头去掉。一切正常了。

    所以我推荐在使用responseXML接收数据的时候,服务端不必把XML的那一串报头写上。其实只要在response上指定了ContentType为text/xml的话,浏览器已经知道你这个消息体是xml的了。会以XML的方式解析,我测试过IE和firefox均正常无误,并且编码也是这里指定的话才生效的。

    另外两点建议:

    1、解析有问题的话,request.responseXML还是能返回对象的,但这个对象未必正常(指包含所有XML节点)。

    2、使用request.responseXML.documentElement获取XML对象。
参考第一点,如果发生1的情况的话使用request.responseXML.documentElement的话是得不到任何对象的。但相反,若获取到对象的话,你就可以放心去使用DOM解析你的XML document了。

    关于JavaScript TIMER的使用

    也许有的人觉得不解,何谓“JavaScript TIMER”,自己的称呼而已,也许有点通俗。就是JavaScript的任务回调器、定时器。

    使用场合的话,最好的一个例子就是将你open一个新的窗口时候,想要在新窗口内进行DOM操作时,你会觉得使用JavaScript timer很好的帮手,不然就会莫名的去找为什么得不到节点,明明节点是有的,ID也是对的...甚至....

    使用timer很简单,一共有两种方法。

    1、单次调用。
   
var id = window.setTimeout(fx, delay);


    把一个timer绑定到指定window之上,在delay之后调用fx方法。

    2、重复调用。(使用场合相对比较多)
   
var id = window.setInterval(fx, delay); 


    参照第一个,只是调用完之后继续回调。

    两者返回的id是很有作用的,用来停止timer继续运行。特别对于第二种方式,如果不停止的话后果可想言之。

    tip:delay单位为毫秒, fx为回调的方法。
   
    停止timer的方法

   
window.clearTimeout(id);

    与
   
window.clearInterval(id);


    关于如何判断新窗口文档已经加载完毕

    使用document.readyState属性,即
if (document.readyState == 'complete') {
  window.clearInterval(id);
  //something to do
}


注意:
引用
readyState属性目前只有IE支持
如果想兼容性好的话推荐还是在用onload等类似的事件解决
1
0
分享到:
评论
1 楼 tom&jerry 2009-05-30  
JSON是javascript原生对象,在javascript中使用很方便啊。

相关推荐

    异步调用webservice返回responseXML为空的问题解决方法

    异步调用webservice返回responseXML为空,详细很多朋友都遇到过类似的问题吧,接下来为大家提供详细的解决方案,感兴趣的朋友可以参考下哈

    Ajax实现responseXML返回信息显示

    Ajax实现responseXML返回信息显示,数据库使用的是sql server2000其中表operator只有四个字段,都是字符型的。

    asp.net ajax操作xmlHttpRequest对象返回的ResponseXML和ResponseText例子

    asp.net ajax操作xmlHttpRequest对象返回的ResponseXML和ResponseText例子

    解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)

    PHP实现异步调用方法研究与分享PHP异步调用socket实现代码C#异步调用的好处和方法分享异步调用webservice返回responseXML为空的问题解决方法C# 委托的三种调用示例(同步调用 异步调用 异步回调)浅析jquery ajax...

    jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML

    使用XMLHttpRequest对象的responseXML的方式来接受XML数据对象的DOM对象

    北京中科信软AJAX培训

    使用responseXML处理返回的XML信息 实战技巧:获取元对象数据 实战技巧:处理列表数据 实战技巧:处理级联的数据 实战技巧:保存更新数据 在普通文本和XML文档之间权衡 何时返回普通文本 何时返回XML文档 innerHTML...

    AJAX中文乱码问题探讨及解决

    AJAX中文问题分为两大类:一是发送路径中的参数有中文,在服务器段接收参数值是乱码二是返回来的responseText或responseXML的值中含有中文是乱码,下面为大家介绍下解决方法

    AJAX对服务器返回XML的处理方法

    在AJAX 中,服务器端如果返回的XML 文档,则可以通过异步对象的responseXML 属性来获取器XML 数据。而开发者可以利用DOM 的相关方法对其进行处理。 假设服务器返回的XML 文档,如下所示: &lt;?xml version="1.0" ...

    关于ajax对象一些常用属性、事件和方法大小写比较常见的问题总结

    最近比较空闲,于是抽个时间整理些关于ajax方法的东东。在项目中经常发现ajax板块...如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  Visual Basic code Function Bytes2BStr(vin)'二进制转字串

    AJAX 源码范例

    源码结构说明 1.Slider文件夹下为源文件 2.Slider.war为部署文件 &lt;br&gt;第22章 程序描述:使用Windows系统的用户在关机的时候,出现的界面只允许用户选择关机、注销或取消动作,而桌面上的程序都不...

    ajax的 responseXML返回接受 asp

     //ajax使用 try { xmlHttp = new ActiveXObject(“Msxml2.XMLHTTP”); } catch (e) { try { xmlHttp = new ActiveXObject(“Microsoft.XMLHTTP”); } catch (e2) { xmlHttp = false; } } if (!...

    ajax异步请求小结

    具体描述ajax的获取,ajax属性,参数设置,编程步骤,缓存问题,get/post乱码问题,以及应用场景的阐述 onreadystatechange 绑订事件处理函数(处理readystatechange事件)。 注:当readyState属性值发生了任何的改变...

    详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度

    如果你使用 XMLHttpRequest 来获得一个远程的 XML 文档的内容,responseXML 属性将会是一个由 XML 文档解析而来的 DOM 对象,这很难被操作和分析。这里有五种主要的分析 XML 文档的方式:  1.使用 XPath 定位到文档...

    模拟百度输入提示功能

    模拟百度输入提示功能,使用jsp+ajax实现,在tomcat7.0运行通过.没有responseXML取不到值的情况出现。提供给刚入门ajax遇到难题的同学

    struts简单实现用户注册(最新修订)

    其二:利用ajax实现省市下拉列表的联动,结果是实现了,但是我的目的是想用responseXML,出现的问题是,只用responseText能获取返回的内容,而responseXML却获取不了 WebRoot目录下emp.sql是本程序用到的sql脚本 本...

    AJAX和DOM的运行经验

    被AJAX中DOM的操作郁闷了好几天,...在浏览器中,你可以使用document.getElementsByName(‘tagname’)[0].value来获取控件值,但是在操作 responseXML的时候你就必须使用getElementsByName(‘tagname’)[0].firstChild

    PHP培训教程之AJAX技术.docx

    使用DOM(DocumentObjectModel)进行动态显示及交互; 使用XML和XSLT进行数据交换及相关操作; 使用XMLHttpRequest进行异步数据查询、检索; 使用JavaScript将所有的东西绑定在。 2、使用Ajax的好处 1、通过异步...

    原生JS实现ajax与ajax的跨域请求实例

    一、原生JS实现ajax ...第六步:使用responseText、responseXML接受响应数据,并使用原生JS操作DOM进行显示 var ajax = new XMLHttpRequest(); ajax.onreadystatechange = function(){ console.log(ajax.r

Global site tag (gtag.js) - Google Analytics