第14章 错误处理与调试 (二)
来源:互联网 发布:科讯cms漏洞 编辑:程序博客网 时间:2024/04/30 12:58
14.3 错误处理策略
过去,所谓 Web 应用程序的错误处理策略仅限于服务器端。在谈到错误与错误处理时,通常要考虑很多方面,涉及一些工具,例如记录和监控系统。这些工具的用途在于分析错误模式,追查错误原因,同时帮助确定错误会影响到多少用户。
在 Web 应用程序的 JavaScript 这一端,错误处理策略也同样重要。由于任何 JavaScript 错误都可能导致网页无法使用,因此搞清楚何时以及为什么发生错误至关重要。绝大多数 Web 应用程序的用户都不懂技术,遇到错误时很容易心烦意乱。有时候,他们可能会刷新页面以期解决问题,而有时候则会放弃努力。作为开发人员,必须要知道代码何时可能出错,会出什么错,同时还要有一个跟踪此类问题的系统。
14.3.1 常见的错误类型
错误处理的核心,是首先要知道代码里会发生什么错误。由于 JavaScript 是松散类型的,而且也不会验证函数的参数,因此错误只会在代码运行期间出现。一般来说,需要关注3种错误:
- 类型转换错误
- 数据类型错误
- 通信错误
这个函数的用意是返回给定 URL 中的查询字符串。为此,它首先使用 indexOf() 寻找字符串中的问号。如果找到了,利用 substring() 方法返回问号后面的所有字符串。这个例子中的两个函数操作字符串,因此只要传入其他数据类型的值就会导致错误。而添加一条简单的类型检测语句,就可以确保函数不那么容易出错:
// 不安全的函数,任何非字符串值都会导致错误
function getQueryString(url){
if (typeof url == "string"){ // 通过检查类型确保安全
var pos = url.indexOf("?");
if (pos > -1){
return url.substring(pos + 1);
}
}
return "";
}
重写后的这个函数首先检查了传入的值是不是字符串。这样,就确保了函数不会因为接收到非字符串而导致错误。
3.通信错误
随着 Ajax 编程的兴起,Web 应用程序在其生命周期内动态加载信息或功能,已经成为一件司空见惯的事。不过,JavaScript 与服务器之间的任何一次通信,都有可能产生错误。
第一种通信错误与格式不正确的 URL 或发送的数据有关。最常见的问题是在将数据发送给服务器之前,没有使用 encodeURIComponent() 对数据进行编码。例如,下面这个 URL 的格式就是不正确的:
http://www.yourdomain.com/?redir=http://www.someotherdomain.com?a=b&c=d
针对 "redir=" 后面的所有字符串调用 encodeURIComponent() 就可以解决这个问题,结果将产生如下字符串:
http://www.yourdomain.com/?redir=http%3A%2F%2Fwww.someotherdomian.com%3Fa%3Db%26c%3Dd
对于查询字符串,应该记住必须要使用 encodeURIComponent() 方法。为了确保这一点,有时候可以定义一个处理查询字符串的函数,例如:
function addQueryStringArg(url, name, value){
if(url.indexOf("?") == -1) {
url += "?";
} else {
url += "&";
}
url += encodeURIComponent(name) + "=" + encodeURIComponent(value);
return url;
}
这个函数接受3个参数:要追加查询字符串的URL、参数名和参数值。如果传入的 URL 不包含问号,还要给它添加问号;否则,就要添加一个和号,因为有问号就意味着有其他查询字符串。然后,再将经过编码的查询字符串的名和值添加到URL后面。可以像下面这样使用这个函数:
var url = "http://www.somedomain.com";
var newUrl = addQueryStringArg(url, "redir", "http://www.someotherdomain.com?a=b & c=d");
alert(newUrl);
使用这个函数而不是手工构建 URL,可以确保编码正确并避免相关错误。
另外,在服务器响应的数据不正确时,也会发生通信错误。第10章曾经讨论过动态加载脚本和动态加载样式,运用这两种技术都有可能遇到资源不可用的情况。在没有返回相应资源的情况下,Firefox、Chrome 和 Safari 会默默地失败,IE 和 Opera 则都会报错。然而,对于使用这两种技术产生的错误,很难判读和处理。在某些情况下,使用 Ajax 通信可以提供有关错误状态的更多信息。
- 第14章 错误处理与调试 (二)
- 第17章 错误处理与调试
- 第14章 错误处理与调试 (一)
- 第14章 错误处理与调试 (三)
- Javascript高级程序设计第17章(错误处理与调试)
- 第7章 调试和错误处理
- 调试与错误处理
- 错误处理与调试
- 错误处理与调试
- 错误处理与调试
- 错误处理与调试
- javaScript笔记(二十四) 错误处理与调试
- 第9章 异常与错误处理
- php错误处理与调试
- javascript错误处理与调试
- JS 错误处理与调试
- [28]错误处理与调试
- JS错误处理与调试
- 第14章 错误处理与调试 (一)
- img在IE6下5px问题
- CString 类成员函数详解
- Android Eclipse关联 android API doc文档
- 配置文件书写
- 第14章 错误处理与调试 (二)
- 近一个月来的收获
- objective-c产生随机数
- 电脑工程师的情书
- VS2008编译问题!
- 高手的25个标准
- 【设计模式】【披着羊皮的狼——适配器模式起源的传说】
- 第14章 错误处理与调试 (三)
- ==把VIM打造成开发C的IDE==