在使用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等类似的事件解决
分享到:
相关推荐
在实际开发过程中,解决异步调用webservice返回responseXML为空的问题,需要综合运用上述知识点,并针对具体情况进行调试。例如,需要确保webservice的URL和方法是可访问的,确保请求的消息格式符合webservice的要求...
当`readyState`为4(表示请求已完成)且`status`为200(表示成功)时,我们就可以通过`xhr.responseText`或`xhr.responseXML`获取服务器返回的数据。 Timer则用于定期执行某项任务,最常用的是`setInterval`函数。...
在本文中,我们将深入探讨如何使用Ajax技术来实现responseXML返回信息的显示,尤其是在与SQL Server 2000数据库交互时。Ajax(Asynchronous JavaScript and XML)是一种创建动态网页的技术,它允许我们在不刷新整个...
本文将深入探讨如何解决这些问题,并介绍如何利用XML数据实现省市区三级联动的功能。 首先,让我们来理解XML(Extensible Markup Language)的本质。XML是一种标记语言,常用于存储和传输结构化数据。它具有自我...
3. 解决乱码问题:文件中提到了乱码问题的解决方法。在设置HTTP响应头的Content-Type时,应当指定字符编码为UTF-8。这样做的目的是确保无论服务器是哪种操作系统平台,接收方浏览器都能正确地解析字符编码,从而避免...
你可以使用JavaScript的`JSON.parse()`函数将JSON字符串转换为JavaScript对象: ```javascript var responseText = xhr.responseText; var data = JSON.parse(responseText); var users = data.users; for (var i =...
在上面的代码中,我们使用 SPPermission 对象设置了基础权限为查看列表项目。 本文解决了 SharePoint 权限问题,通过 ECMAScript 客户端 JavaScript 代码获得服务器端用户账号,并实现了自定义权限控制页面访问权限...
最关键的是,需要将JavaScript中的响应处理方式从responseText改为responseXML,这是因为要利用XMLHttpRequest对象的responseXML属性来获取XML格式的响应数据,并将其作为DOM对象来解析和使用。 总的来说,这部分...
为了解决这个问题,我们需要自定义错误处理方法。以下是修复代码示例: ```javascript handleError: function(s, xhr, status, e) { // 如果有本地回调,执行它 if (s.error) { s.error.call(s.context || s, ...
如果上述方法仍无法解决问题,检查所有涉及的文件(如JSP、HTML、Java文件)是否以UTF-8编码保存,因为文件编码不一致也可能导致乱码。 总之,确保前后台数据交互全程使用UTF-8编码,是避免中文乱码问题的关键。...
6. **JSON.parse()错误**:在接收到服务器响应后,前端通常会使用`JSON.parse()`方法将字符串转换为JavaScript对象。如果响应不是有效的JSON格式,这个方法会抛出错误。 7. **后端接口问题**:问题也可能出在后端,...
当服务器返回的`responseText`或`responseXML`出现乱码时,可能是因为服务器发送的数据编码与Ajax解析时使用的UTF-8不匹配。服务器端应明确指定响应的字符集,例如在JSP中: ```java response.setContentType(...
5. **处理结果**:如果状态正常(`status`为200),则可以使用`responseText`或`responseXML`获取服务器返回的数据,并对页面进行相应更新。 ### 三、Ajax的优点 1. **提高用户体验**:页面无需刷新,用户感知不到...
1. **浏览器兼容性**:不同浏览器对Ajax的支持程度不同,需要使用库如jQuery来解决兼容问题。 2. **安全性**:由于Ajax请求不会触发浏览器的安全机制,可能引发跨站脚本攻击(XSS)等问题。 3. **SEO问题**:搜索...
为解决这些问题,开发者可以使用各种库和框架,如jQuery、axios或fetch API,它们提供了更方便的接口和更好的兼容性。 Ajax与AjaxFastLane的关系: AjaxFastLane可能是某个关于Ajax技术的教程、书籍或资料的名称,...
这篇文章将深入探讨`Ext.Ajax.request`的使用,以及在实际应用中可能遇到的小问题。 首先,`Ext.Ajax.request`的基本语法如下: ```javascript Ext.Ajax.request({ url: 'your-url', method: 'GET', // 可选值有...
6. **处理响应**:如果`status`属性值为200,表示请求成功,可以使用`responseText`或`responseXML`属性获取服务器返回的数据。 **三、Ajax的实例应用** 1. **获取数据**:比如,用户在搜索框输入关键词,Ajax实时...
服务器已返回响应,可以使用`responseText`或`responseXML`获取数据。 `onreadystatechange`事件会在每次`readyState`改变时触发,开发者通常会在这个事件的回调函数中检查`readyState`是否等于4,来判断请求是否...