发新话题
打印

[AJAX应用] Ajax Hacks-hack8 处理Request Object 的错误

Ajax Hacks-hack8 处理Request Object 的错误

Ajax Hacks-hack8 处理Request Object 的错误

让Ajax能检测服务器的错误,并能像用户提供有用的信息。

Ajax技术的魅力在于允许JavaScript能在用户不干预的情况下与服务器连接。然而JavaScript开发者经常无法控制服务器组件(可能是一个web服务或其他软件)。尽管你的应用程序包括了你自己的服务器组件,也无法保证服务器永远运行正常或者用户遇到错误。因此,当程序出错时候,必须保证应用产业程序能恢复。


本hack跟踪错误并显示出错误信息,当Ajax程序失去服务器连接的时候。


问题, 问题...

Hack捕获下列异常事件,并为应用程序推荐解决的办法:


正在连接的web应用程序或服务器组件暂时不可用。

应用程序连接的服务器挂掉了,或者URL改变了。

要连接的服务器组件错误,在连接的过程中发作了。


当requst对象调用open方法时,代码使用了不同的主机地址而不是用户下载的web页面地址。当调用open方法时,request对象抛出一个异常。


你可以在其他地方使用本hack的异常处理方法。hack还使用了hack6种的股票计算程序代码。看一下html代码:


http://www.w3.org/TR/1999/REC-html401–19991224/strict.dtd”>


Your total Stock Holdings
javascript:void%200>“getStockPrice(this.stSymbol.value,this.numShares.value);return false”>


Enter stock symbol:  






Enter share amount:  




Get Total Value

When users load this file into their browsers, they see the screen shown in Figure 1-11.

Figure 1-11. Request a stock’s price


我们感兴趣的代码是能捕获异常的部分,后台服务器关闭、错误、或者错误的URL。handleResponse函数是事件处理函数用来管理服务器响应,request.onreadystatechange=handleResponse。接下来的代码使用try/catch/finally 来捕获并处理无效数字这一问题。


function handleResponse( ){

var statusMsg=“”;

try{

if(request.readyState == 4){

if(request.status == 200){

/* Check if the return value is actually a number.

If so, multiple by the number

of shares and display the result */

var stockPrice = request.responseText;


try{

if(isNaN(stockPrice)) { throw new Error(

“The returned price is an invalid number.”;}

if(isNaN(numberOfShares)) { throw new Error(

“The share amount is an invalid number.”;}

var info = “Total stock value: $”+

calcTotal(stockPrice);

displayMsg(document.

getElementById(“msgDisplay“,info,“black”;

document.getElementById(“stPrice“.style.fontSize=”0.

9em”;

document.getElementById(“stPrice“.innerHTML =“price: ”+

stockPrice;

} catch (err) {

displayMsg(document.getElementById(“msgDisplay”,

“An error occurred: ”+

err.message,“red”;

}

} else {

//request.status is 503 if the application isn‘t available;

//500 if the application has a bug

alert(

“A problem occurred with communicating between the ”

XMLHttpRequest object and the server program. ”+

“Please try again very soon”;

}

}//end outer if

} catch (err) {

alert(“It does not appear that the server ”+

“is available for this application. Please ”+

“try again very soon. \\nError: ”+err.message);


}

}


下面看一下用来处理不同异常的代码。


try块将抛出内部的任何异常,而相应的catch将捕获这个异常,并解决异常。try catch是相对的。


当主机挂掉了会发生什么呢?尽管你请求的URL是正确的。这种情况下,试图访问request.status 属性的代码会抛出一个异常,应为request对象没有从服务器接收到响应,以及相应的状态属性。

因此,代码会弹出一个警告对话框来提示用户。

Figure 1–12 depicts what the alert window looks like after this type of error.


Figure 1-12. Uh-oh, server down


代码显示了用户的信息,以及更多异常错误的相关信息。你可以不管学些信息,不过这些对程序的修改和调试很有帮助。


代码里的错误变量JavaScript错误对象。对象的信息属性就是一个错误信息,是由JavaScript引擎产生的string。


如果没有使用 TRy/catch/finally 机制,用户只能看到很不容易懂得由JavaScript引擎产生的错误信息。在关闭这个讨厌的错误提示框以后,用户就无法了解应用程序的更多状态信息了。


有时,服务器或主机运行正常,但是要连接的服务器组件有问题。这样的情况下,request.status 属性的值是503(服务不可用)。因为状态属性的值不是200,代码的这一部分将捕获这个异常:


} else {

//request.status is 503 if the application isn‘t available;

// 500 如果服务有错误

alert(

“A problem occurred with communicating between the ”

“XMLHttpRequest object and the server program. ”+

“Please try again very soon”;

}


换句话说,用户可以在弹出窗口中看到应用程序状态信息。也可以显示服务器组件的错误。这样的情况下,响应状态码是500(内部服务错误)。此外404状态响应码表示服务器的静态或动态组件无法找到请求的URL,就是常见的令人讨厌的400错误(页面不存在或被删除)。


try/catch/finally语句只适用于1.4或更高的版本中。finally语句是可选的。


令人沮丧的错误的URL

如果用户请求的URL是错误的或已经改变了,会发生什么呢? 调用request.open方法会抛出异常,因此必须放在try/catch/finally语句里边处理。

在犯法initReq( )里边,有相应的代码:


function httpRequest(reqType,url,asynch){

//Mozilla-based browsers

if(window.XMLHttpRequest){

request = new XMLHttpRequest( );

} else if (window.ActiveXObject){

request=new ActiveXObject(“Msxml2.XMLHTTP”;

if (! request){

request=new ActiveXObject(“Microsoft.XMLHTTP”;

}

}

//the request could still be null if neither ActiveXObject

//initialization succeeded

if(request){

initReq(reqType,url,asynch);

} else {

alert(“Your browser does not permit the use of all ”+

“of this application‘s features!”;

}

}

/* Initialize a request object that is already constructed */

function initReq(reqType,url,bool){

try{

/* Specify the function that will handle the HTTP response */

request.onreadystatechange=handleResponse;

request.open(reqType,url,bool);

request.send(null);

} catch (err) {


alert(

“The application cannot contact the server at the moment.”+

“ Please try again in a few seconds.”;

}

}


另一种情况是请求的URL不是所想的。例如,用户想从http://www.myorg.com/app下载页面,但是打开的URL却是http://www.myorg.com,这样的错误也可以使用try/catch/finally 语句捕获。


本hack讲述了Ajax常见的异常以及捕获他们的办法。
这世界总有你不明白

TOP

TOP

TOP

沈阳宏海

TOP

做股票期货的朋友进来聊聊

★★QQ:10889023期货开户免费/股票开户免费手续费最低TEL15838025938★★
■期货免费开户/股票免费开户,销售业界最牛网络营销软件(全功能版本免费试用)。最小的投资最大的收益,超强的广告效果QQ:10889023■
●本条系本软件发布●
★期货/股票开户免费QQ:10889023手续费最低★

TOP

shaiya gold

Ownership of houses in China has changed greatly in the past decade. In the past, most houses were stateowned. But now, private houses are everywhere. As is shown in the chart above, in 1990, the city's houses were mainly state-owned, with a percentage of 75. This percentage became 60 in the year 1995 and then dropped sharply to 20 in 2000. At the same time, the number of private houses has soared up to 80 percent. <a href=http://www.fast-wowgold.com/shaiya-gold.htm>Buy Cheap Shaiya gold</a>There are mainly two reasons that account for this rapid change. Firstly, the government has been forwarding the policy to support private houses programs. These programs have proved to be very important in developing China's economy.
<a href=http://www.fast-wowgold.com/shaiya-gold.htm>shaiya coin</a>The change has enabled more people to enjoy larger living space. At the same time, people feel pressure to make more money so that they can buy their own houses.

TOP

高手啊!

支持!支持!

开店 创业 投资 加盟 连锁

TOP

TOP

微软工程师收费5600元 枪手办网站高价替考

TOP

救援飞机首降汶川震中

昨日上午9时04分,成都北郊某机场,成都军区某陆航团3架军用直升机满载救援物资飞赴汶川、映秀、茂县受灾地区投放,并成功地将首批近40名伤病员空运回成都救治。截至14日20时,成都军区共出动直升机90架次,向汶川县城、映秀镇、北川县、茂县等灾区投送食品、药品、帐篷等物资33.3吨,抢运危重伤员156人。

  汶川:救援飞机首抵震中

  在12日地震灾情发生后不到两小时,该团就派出直升机试图第一时间到达震中汶川,勘查灾情;13日他们又5次尝试向汶川开进。但因天气原因,飞机无法抵达震中。昨日雨过天晴,上午9时04分,3架满载矿泉水、方便面、火腿肠、帐篷等救援物资的直升机,从成都北郊某机场乘风而起。汶川地处高原,直升机飞行的最高海拔有限,而地面峡谷很窄,还有高压线。但低飞可更好地察看灾情,飞机员凭借精湛的技术沿着峡谷低飞。

  9时40分,飞机到达汶川上空。在空中,陆航团干事丁一看到,地面的瓦房纷纷垮塌,而楼房大多仍站立着。地面已经有部队在开展救援。地面一所学校,好几栋楼房都稳稳地站立着。在学校操场上,搭建了密密麻麻的帐篷。有人指认,这里可能是阿坝师专。

  盘旋了几圈后,10时07分,飞行员选择在汶川县城外山头一片稍微平坦的空地上降落。随后两架飞机也降落在汶川。这是自地震发生以来,救援飞机首次抵达震中地区。

  当地的百姓看到“神兵天降”,一片沸腾,地面部队官兵和群众都来搬运救援物资。

  映秀:挤了又挤运送伤员

  物资卸载完毕。直升机又飞往茂县察看灾情。该团干事黄龙从空中看下去,河里有一艘冲锋舟正朝汶川方向快速前进。地面山体滑坡,有一座山还正在滑坡,泥沙石俱下,速度很快,往下掉的石头,最大的大概有半辆轿车那么大;有高压线倒伏;公路上的汽车都停着,行人挤在路上。

  根据塔台的指挥,飞机又匆匆赶往映秀运送伤病员。往地面看,漩口中学部分教学楼垮塌。飞机顺利地降落在学校前一个河滩上。军队和武警官兵以及当地居民,一起匆匆将伤员抬上飞机。一辆直升机正常情况下可载10人,但遇到重伤的只能载几人。为多运送一个伤病员,大家想办法腾空间,挤了又挤。

  在飞机上,一个十三四岁的女孩,一直哭喊痛。小女孩伸出手来,想抓住什么,黄龙见状赶紧把手伸过去,女孩抓住他的手,紧紧地握住,哭喊声小了。官兵们给渴得严重的伤病员喂矿泉水、牛奶。但从早上到昨晚9时,黄龙只吃了一桶方便面。

  中午12时05分,首批飞赴震中救援的3架直升机回到成都。120急救车早已等候在机场。飞机一停稳,医务人员立即向前把病员接到救护车上,拉响警报,赶赴医院成都至深圳机票
成都至北京机票
成都到广州机票成都到上海特价机票成都到杭州特价机票
专业销售国际、国内特价机票:028-66006629多线

TOP

TOP

风机

支持!!呵呵
   










浙江聚英风机工业有限公司是一家专业设计和制造风机、风冷设备的科技型的企业。其主要产品有]排烟风机、柜式离心风机箱、混流风机斜流风机、防爆防腐风机、排尘风机、空调风机、冷却风机等各类“专、特、新”风机系列,以其结构新、噪声低、性能优良、运转稳定等特点,广泛应用于机械、电力、化工、冶金、医药、食品等行业和高级民用建筑,成为各设计院和安装及用户单位的首选品牌,产品畅销全国各大中城市,并配套出口多个国家和地区,享有极高市场声誉。

TOP

发新话题