日期:2014-05-16 浏览次数:20646 次
Ajax是不能在本地文件系统中使用的,必须把数据放到服务器上。无论是IIS、Apache、 Tomcat,还是你熟悉的其他服务器, 只要支持HTTP协议,就可以使用EXT中的Ajax。 至于本地为何不能用Ajax,主要是因为Ajax要判断HTTP响应返回的状态,只有status=200时才认为这次请求是成功的。 所以,localXHR做的就是强行修改响应状态,让Ajax可以继续下去。 下面我们来分析一下localXHR的源代码。 > 加入了一个forceActiveX属性,默认是false,它用来控制是否强制使用activex,activex是在IE下专用的。 > 修改createXhrObject函数,只是在最开始处加了一条判断语句,如下所示:> 增加了getHttpStatus函数,这是为了处理HTTP的响应状态,如下代码:
- if(Ext.isIE7?&&?!!this.forceActiveX){throw("IE7forceActiveX");}????
- getHttpStatus:?function(reqObj){??
- ????var?statObj?=?{??
- ????????status:0??
- ????????,statusText:''??
- ????????,isError:false??
- ????????,isLocal:false??
- ????????,isOK:false??
- ????};??
- ????try?{??
- ????????if(!reqObj)throw('noobj');??
- ????????statObj.status?=?reqObj.status?||?0;??
- ???
- ????????statObj.isLocal?=?!reqObj.status?&&?location.protocol?==?"file:"?||??
- ???????????????????????????Ext.isSafari?&&?reqObj.status?==?undefined;??
- ???
- ????????statObj.statusText?=?reqObj.statusText?||?'';??
- ???
- ????????statObj.isOK?=?(statObj.isLocal?||??
- ????????????????????????(statObj.status?>?199?&&?statObj.status?<?300)?||??
- ?????????????????????????statObj.status?==?304);??
- ???
- ????}?catch(e){??
- ????????//status?may?not?avail/valid?yet.??
- ????????statObj.isError?=?true;??
- ????}??
- ???
- ????return?statObj;??
- },??