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");}????
它为状态增添了更多语义,status表示状态值,statusText表示状态描述,isError表示是否有错误, isLocal表示是否在本地进行Ajax访问,isOK表示操作是否成功。 判断isLocal是否为本地的有两种方法:reqObj没有status,而且请求协议是file:;浏览器是Safari, 而且reqObj.status没有定义。 statObj中的isOK属性用来判断此次请求是否成功。 判断请求是否成功的条件很多,例如:isLocal的属性为true、响应状态值在199~300之间、响应状态值是304等。 如果处理过程中出现了异常,就会将isError属性设置为true,最后会把配置好的statObj对象返回,等待下一个步骤的处理。 localXHR.js对handleTransactionResponse函数进行了简化。 因为增加的getHttpStatus函数很好地封装了与请求相关的各种状态信息,所以在handleTransactionResponse函数中我们不会 看到让人头晕目眩的响应状态代码。 取而代之的是isError和isOK这些更容易理解的属性,localXHR.js直接使用这些属性来处理响应。 createResponseObject函数被大大强化了。 其实前半部分都是一样的,localXHR.js中对isLocal做了大量的处理,响应中的responseText可以从连接中获得。 如果需要XML,它就使用ActiveXObject("Microsoft.XMLDOM")或new DOMParser()把responseText解析成XML放到response里, 响应状态也是重新计算的,这样就能让Ajax正常调用了。 最后处理的是asyncRequest函数,如果在异步请求时出现异常,就调用handleTransac- tionResponse返回响应, 然后根据各种情况稍微修改header属性。 我们来看看下面这行代码:
- 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;??
- },??
如果协议是file:,就强制使用activex。
- Ext.lib.Ajax.forceActiveX?=?(document.location.protocol?==?'file:');??????????????????
详细解决方案
11.localXHR支持本土使用Ajax
热度:280 发布时间:2012-10-21 09:00:07.0
相关解决方案
- 。各位大神,小弟有个简单的有关问题,就是小弟我用struts+ajax+juery+json时为何总是不进入action啊 配置文件如上
- ajax 多值 jsp 急
- ajax responsetext 替空值,想不通。
- springmvc jquery ajax 提交复杂对象,415异常解决办法
- jquery ajax select解决方法
- ajax Post 一直返回的是error ,为啥
- servlet+jquery1.4.2(ajax error?)解决方案
- 扭结,AJAX WEB UI库选型
- 求大神解决偏题 - jquery ajax
- ajax 拓扑图 实现,该如何解决
- ajax 怎么实现文件下载
- struts2+ajax+oracle实现目录树,该怎么解决
- 求个php+ajax+easyUI datagrid的简略完整的demo
- 验证用户名是否存在。Ajax+Action如何写了
- :前台和后台开发有啥区别?还有css、html、ajax、js、jquery都有什么区别
- 求章立民先生所著的书《APS.NET AJAX WEB应用开发秘诀(vb或者是c#)》所带的北风贸易数据库解决方案
- 求章破民先生所著的书《APS.NET AJAX WEB应用开发秘诀(vb或者是c#)》所带的北风贸易数据库
- 想学.net Ajax 求课程。
- MVC3 + jquery +ajax 来实现动态的下拉框,该怎么解决
- 求解一上。 纠结一天了。 ajax 如何把返回的list取出来
- ajax 中 innerHTML不能联系关系包含GridView的ASPX页面
- ajax 兑现局部刷新
- ajax VS2010工具箱不显示,该怎么处理
- AJAX 的TabContainer控件 嵌套 iframe 标签页 标签页面过长时自动顺应
- asp.net jquery ajax 取返回值并处理 .
- jquery ajax 为啥没执行.新手在线求解
- Ajax Control Toolkit 之 DropDownExtender <大侠请进,小侠勿扰>解决办法
- MVC ajax 下传图片有关问题
- AJAX UpdateProgress控件显示有关问题
- 各位大牛,如何把所有select的值存入数据库表中(用mvc,ajax),小弟新手