|
|
6#

楼主 |
发表于 2007-10-6 10:54:23
|
只看该作者

六、参考资料:
1、使用try-catch-finally处理异常
用户可以使用该结构处理可能发生异常的代码,如果发生异常,则由catch捕获并进行处理,其语法如下:
try{
//要执行的代码
}
catch(e){
//处理异常的代码
}
finally{
//无论异常发生与否,都会执行的代码
}
通过异常处理,可以避免程序停止运行,从而具有了一定的自我修复能力。
在Ajax开发中,利用异常处理的一个典型应用就是创建XMLHttpRequest对象,不同浏览器创建它的方式是不一样的,为了使代码能够跨浏览器运行,就可以利用异常,一种方法不行,再用另一种方法,直到不发生异常为止,例如:
<script language="JavaScript" type="text/javascript">
<!--
var xmlhttp;
try{
//尝试用IE浏览器的方式创建XMLHttpRequest对象
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
try{
//尝试用非IE浏览器的方式常见XMLHttpRequest对象
xmlhttp=new XMLHttpRequest();
}catch(e){}
}
//-->
</script>
2、Append 方法
Append 方法
将对象追加到集合中。如果集合是 Fields,可以先创建新的 Field 对象然后再将其追加到集合中。
语法
collection.Append object
fields.Append Name, Type, DefinedSize, Attrib
参数
collection 集合对象。
fields Fields 集合。
object 对象变量,代表所要追加对象。
Name 字符串,新 Field 对象的名称,不得与 fields 中的任何其他对象同名。
Type DataTypeEnum 类型,其默认值为 adEmpty。新字段的数据类型。
DefinedSize 可选,长整型,指示新字段的定义大小(以字符或字节为单位)。该参数的默认值源于 Type (默认的 Type 为 adEmpty,默认的 DefinedSize 未指定)。
Attrib 可选,FieldAttributeEnum,其默认值是 adFldDefault。指定新字段的属性。如果该值未指定,字段将包含源于 Type 的属性。
3、XmlHttpRequest对象属性
onreadystatechange
每次状态改变所触发事件的事件处理程序
readyState
对象状态值:
0 = 未初始化(uninitialized)
1 = 正在加载(loading)
2 = 加载完毕(loaded)
3 = 交互(interactive)
4 = 完成(complete)
responseText
从服务器进程返回的数据的字符串形式
responseXML
从服务器进程返回的DOM兼容的文档数据对象
status
从服务器返回的数字代码,比如404(未找到)或200(就绪)
statusText
伴随状态码的字符串信息
<html>
<body>
<p>
程序作者:翟振凯 QQ:22336848 开发日期:2006年8月 <br>
网站:<a href="http://www.xiaoqi.net">http://www.xiaoqi.net</a>
程序打包下载地址:<a href="http://www.xiaoqi.net/zuopin/js_user.rar">http://www.xiaoqi.net/
zuopin/
js_user.rar</a>
</p>
<fieldset >
<legend>探测设置</legend>
<table border="1" width="100%" bordercolorlight="#E6E6E6" cellspacing="0" bordercolordark="#D4D0C8">
<tr>
<td>探测地址</td>
<td>
<input type="text" id="url" size="63" value=""></td>
</tr>
<tr>
<td>失败包涵标记 </td>
<td><input type="text" id="err" size="63" value=""></td>
</tr>
<tr>
<td>测试单个值</td>
<td><input type="text" id="id_one" size="20">
<input type="button" value="探测" onclick="ck();"> </td>
</tr>
<tr>
<td>选择字典文件</td>
<td><input type="file" name="dic_url" size="20">
<input type="button" value="开始" onclick="ck1();">
<input type="button" value="暂停" temp="" onclick="pause(this)">
<input type="button" value="清除可用结果" onclick="x_1.innerHTML=''">
<input type="button" value="清除不可用结果" onclick="x_2.innerHTML=''">
</td>
</tr>
<tr>
<td>高级参数</td>
<td>
每次探测:<input type="text" id="jc" value="1" size="3"> 个
缓冲时间:<input type="text" id="hc" value="0.1" size="3"> 秒
进度:<input type="text" id="jd" value="0" size="12">
探测数量:<input type="text" id="sl" size="13">
</td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>可用值:</legend>
<div style="height:100px;width:100%;overflow:auto;"><span id="x_1"></span></div></fieldset>
<fieldset>
<legend>不可用值:</legend>
<div style="height:100px;width:100%;overflow:auto;"><span id="x_2"></span></div>
</fieldset>
</body>
</html>
function ck()//单个值探测验证检查
{
if (url.value.length<5){alert('请输入要探测地址!');return};
if (id_one.value.length<1){alert('请输入要探测的值!');return};
geturl(id_one.value)
}
function ck1()//批量值探测验证检查
{
if (url.value.length<5){alert("请输入要探测地址!");return}
if (err.value.length<1){alert("请输入不可用标记!");return}
if (dic_url.value.length<5){alert("请先选择字典文件!");return}
jd.value=0;
kaishi()
}
//载入本地字典文件,并把内容定义为数组
function kaishi(){
fileFullPath=dic_url.value;
xmlhttp.open("GET",fileFullPath,false);//载入字典文件方法
xmlhttp.send();
Html=Rec_Html(xmlhttp.responseBody);//中文编码转换
dic=Html.split('\r\n');//以换行符将载入的字典内容转换为数组
sl.value=dic.length;//告诉用户要探测的次数(数组大小)
xunhuan()//成功载入后开始循环探测。
}
//载入本地字典文件,并把内容定义为数组结束
//开始探测 参数为要探测的当前值
function geturl(id)
{
try{
xmlhttp.open("GET",url.value+id,false);//定义数据传送方式,服务网页的URL(探测地址+探测值),是否同步执行
xmlhttp.onreadystatechange = function() {//xmlhttp 触发事件
if(xmlhttp.readyState==4)//xmlhttp对象状态如果为完成
{
if(xmlhttp.status==200) //如果服务器返回的状态码为200(成功)
{
//对结果的中文编码转换判断
if(err.value.replace(/[^\W]/g,'').length=0)
/*关于转换判断的注:
例如:"翟振凯".replace(/[^\W]/g,'').length 返回结果 3
"翟振凯22336848".replace(/[^\W]/g,'').length 返回结果 3
"xiaoqi22336848".replace(/[^\W]/g,'').length 返回结果 0
"小琦22336848".replace(/[^\W]/g,'').length 返回结果 2
replace(/[^\W]/g,'')的功能是把字符串里的英文和数字都清除掉。
*/
{
Html=xmlhttp.responseText;//不转换
}
else
{
Html=Rec_Html(xmlhttp.responseBody);//转换
}
//对结果的中文编码转换判断结束
// 根据判断依据区分可用或不可用的值!
if(Html.indexOf(err.value,0)<0)
{
x_1.innerHTML=x_1.innerHTML+"<nobr> "+id;//输出可用值
}
else
{
x_2.innerHTML=x_2.innerHTML+"<nobr> "+id;//输出不可用值
}
// 根据判断依据区分可用或不可用的值!
}
}
}
xmlhttp.send();
}
catch(e)
{
x_2.innerHTML=x_2.innerHTML+"<nobr> "+id+"超时!";//输出异常或超时的值。
}
}
//开始探测结束
if(err.value.replace(/[^\W]/g,'').length=0)
//用正则替换掉任何非单词和数字字符后,如果值大于0,说明判断依据中可能含有中文或其它字符,就进行编码转换。
{
Html=xmlhttp.responseText;//不转换
}
else
{
Html=Rec_Html(xmlhttp.responseBody);//转换
}
//尝试用IE浏览器的方式创建XMLHttpRequest对象
var xmlhttp = null;
try
{
xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
}
catch(e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){
alert("您的浏览器不能创建XMLHttpRequest对象,无法使用此程序!");
}
}
//尝试用IE浏览器的方式创建XMLHttpRequest对象结束
/*
翟振凯注:MSXML2.XMLHTTP 和 Microsoft.XMLHTTP 都是微软的XMLHTTP控件,只是版本不同。
IE的安全级别如果不是太高,微软的XMLHTTP控件是可以跨域获取数据的。
因为 Mozilla Firefox 浏览器的 XMLHttpRequest() 不能跨域获取数据,我们就不用 XMLHttpRequest() 方法创建XMLHTTP对象了。
*/
<html>
<body>
<p>
程序作者:翟振凯 QQ:22336848 开发日期:2006年8月 <br>
网站:<a href="http://www.xiaoqi.net">http://www.xiaoqi.net</a>
程序打包下载地址:<a href="http://www.xiaoqi.net/zuopin/js_user.rar">http://www.xiaoqi.net/
zuopin/
js_user.rar</a>
</p>
<fieldset >
<legend>探测设置</legend>
<table border="1" width="100%" bordercolorlight="#E6E6E6" cellspacing="0" bordercolordark="#D4D0C8">
<tr>
<td>探测地址</td>
<td>
<input type="text" id="url" size="63" value=""></td>
</tr>
<tr>
<td>失败包涵标记 </td>
<td><input type="text" id="err" size="63" value=""></td>
</tr>
<tr>
<td>测试单个值</td>
<td><input type="text" id="id_one" size="20">
<input type="button" value="探测" onclick="ck();"> </td>
</tr>
<tr>
<td>选择字典文件</td>
<td><input type="file" name="dic_url" size="20">
<input type="button" value="开始" onclick="ck1();">
<input type="button" value="暂停" temp="" onclick="pause(this)">
<input type="button" value="清除可用结果" onclick="x_1.innerHTML=''">
<input type="button" value="清除不可用结果" onclick="x_2.innerHTML=''">
</td>
</tr>
<tr>
<td>高级参数</td>
<td>
每次探测:<input type="text" id="jc" value="1" size="3"> 个
缓冲时间:<input type="text" id="hc" value="0.1" size="3"> 秒
进度:<input type="text" id="jd" value="0" size="12">
探测数量:<input type="text" id="sl" size="13">
</td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>可用值:</legend>
<div style="height:100px;width:100%;overflow:auto;"><span id="x_1"></span></div></fieldset>
<fieldset>
<legend>不可用值:</legend>
<div style="height:100px;width:100%;overflow:auto;"><span id="x_2"></span></div>
</fieldset>
</body>
</html>
function ck()//单个值探测验证检查
{
if (url.value.length<5){alert('请输入要探测地址!');return};
if (id_one.value.length<1){alert('请输入要探测的值!');return};
geturl(id_one.value)
}
function ck1()//批量值探测验证检查
{
if (url.value.length<5){alert("请输入要探测地址!");return}
if (err.value.length<1){alert("请输入不可用标记!");return}
if (dic_url.value.length<5){alert("请先选择字典文件!");return}
jd.value=0;
kaishi()
}
//载入本地字典文件,并把内容定义为数组
function kaishi(){
fileFullPath=dic_url.value;
xmlhttp.open("GET",fileFullPath,false);//载入字典文件方法
xmlhttp.send();
Html=Rec_Html(xmlhttp.responseBody);//中文编码转换
dic=Html.split('\r\n');//以换行符将载入的字典内容转换为数组
sl.value=dic.length;//告诉用户要探测的次数(数组大小)
xunhuan()//成功载入后开始循环探测。
}
//载入本地字典文件,并把内容定义为数组结束
if(err.value.replace(/[^\W]/g,'').length=0)
//用正则替换掉任何非单词和数字字符后,如果值大于0,说明判断依据中可能含有中文或其它字符,就进行编码转换。
{
Html=xmlhttp.responseText;//不转换
}
else
{
Html=Rec_Html(xmlhttp.responseBody);//转换
} |
|