当前web技术中最热门的词语是什么?是AJAX。AJAX框架组件的核心是XMLHttpRequest javascript对象,它允许客户端开发人员在不中断用户操作、不利用隐藏页面的情况下,通过HTTP发送和接收XML文档。现在,有些人可能会感到恐惧,因为它突然允许那些可能过多地使用了验证窗体和动画图像的客户端开发人员负责传递XML文档和处理HTTP头信息,但是,没有风险就没有收益。我们不用害怕,我将演示如何使用XMLHttpRequest来添加一些以前不可能的、行不通的特性,它同时还减少了错误,提高了产品质量。
javascript中的XMLHttpRequest和XML DOM
首先,我们需要建立一些规则。特殊的XMLHttpRequest对象和一般的XML DOM都受到了最新的浏览器(IE、Mozilla、Safari、Opera)的广泛支持,尽管在一般情况下,微软对于自己的实现会稍微增加一些东西,需要某些特殊的处理。尽管我们更多的朋友直接实现了XMLHttpRequest,但是IE还是要求你用相同的属性实例化一个ActiveXObject。在Apple开发者关系站点上可以找到相关的概述和所有特性列表。
下面是一个基本的例子:
var req; function postXML(xmlDoc) { if (window.XMLHttpRequest) req = new XMLHttpRequest(); else if (window.ActiveXObject) req = new ActiveXObject("Microsoft.XMLHTTP"); else return; // 失败了 req.open(method, serverURI); req.setRequestHeader(’content-type’, ’text/xml’); req.onreadystatechange = xmlPosted; req.send(xmlDoc); } function xmlPosted() { if (req.readyState != 4) return; if (req.status == 200) { var result = req.responseXML; } else { // 失败了 } } |
这种强大的功能的潜在用户是很多的,对于它可能实现的功能的探索才刚刚开始。但是在你试图在web上的建立XML功能之前,我建议你设置一个"安全网"来保证你的抱负(想法)不会受到打击。
javascript错误处理基础
javascript已经出现很久了,它的早期版本比较原始,缺少特性,仅仅是实现了而已。最新的浏览器不但支持C++和Java中try/catch/finally关键字,而且实现了onerror事件,而这个事件可以捕捉运行时出现的任何错误。它的使用是非常直接的:
function riskyBusiness() { try { riskyOperation1(); riskyOperation2(); } catch (e) { // e是一个Error类型的对象,至少有两个属性:name和message } finally { // 清除消息 } } window.onerror = handleError; // 捕捉所有错误的安全网 function handleError(message, URI, line) { // 提示用户这个页面可能无法正常响应 return true; // 停止默认的消息 } |
实际的例子:把客户端错误传递到服务器上
现在我们知道了XMLHttpRequest和javascript错误处理的一些基础知识了,我们来看一个同时使用了两者的实现例子。你可能认为javascript错误可以很简单地在流行的"黄色死亡三角"中显示出来,但是仍然有一些错误传递到了几家篮筹股公司的公共web站点的质量部门了。
因此,我将提供一个用于捕捉错误并把错误记录到服务器上的方法,这样其他人就可能修补这些问题。首先,我们考虑客户端。客户端必须提供一个类,它被用作日志记录器(Logger)对象,可以透明地处理各种细节信息。
下面是我们建立的构造函数:
// 类的构造函数 function Logger() { // 字段 this.req; // 方法 this.errorToXML = errorToXML; this.log = log; } |
接下来,我们定义了一个方法,它会把Error对象序列化为XML。在默认情况下,Error对象只有两种属性,分别是name和message,但是我们还是使用了第三个属性(location),它有时候是有用的。
// 把错误映射到XML文档中 function errorToXML(err) { var xml = ’<?xml version="1.0"?>’ + ’<error>’ + ’<name>’ + err.name + ’</name>’ + ’<message>’ + err.message + ’</message>’; if (err.location) xml += ’<location>’ + err.location +’</location>’; xml += ’</error>’; return xml; } |
新闻热点
疑难解答
图片精选