Ext.data专题十一:localXHR支持本地使用Ajax
2010-01-30 10:30
387 查看
Ext.data专题十一:localXHR支持本地使用Ajax
Ajax是不能在本地文件系统中使用的,必须把数据放到服务器上。无论是IIS、Apache、 Tomcat,还是你熟悉的其他服务器,只要支持HTTP协议,就可以使用EXT中的Ajax。 至于本地为何不能用Ajax,主要是因为Ajax要判断HTTP响应返回的状态,只有status=200时才认为这次请求是成功的。 所以,localXHR做的就是强行修改响应状态,让Ajax可以继续下去。 下面我们来分析一下localXHR的源代码。 > 加入了一个forceActiveX属性,默认是false,它用来控制是否强制使用activex,activex是在IE下专用的。 > 修改createXhrObject函数,只是在最开始处加了一条判断语句,如下所示:if(Ext.isIE7 && !!this.forceActiveX){throw("IE7forceActiveX");}
> 增加了getHttpStatus函数,这是为了处理HTTP的响应状态,如下代码: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; },
它为状态增添了更多语义,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属性。
我们来看看下面这行代码:Ext.lib.Ajax.forceActiveX = (document.location.protocol == 'file:');
如果协议是file:,就强制使用activex。
相关文章推荐
- Ext.data专题八: Ext.Ajax
- SpringCloud SpringBoot mybatis 分布式微服务(十一)Spring Boot多数据源配置与使用(Spring-data-jpa支持)
- bootstrap-data-target触发模态弹出窗元素的data使用 data-toggle与data-target的作用 深入ASP.NET MVC之九:Ajax支持 Asp.Net MVC4系列--进阶篇之AJAX
- Ext.data.JsonStore使用HttpProxy加载数据时传递参数的两种方法
- EXT核心API详解(十一)_Ext.data.Store/GroupingStore/JsonStore/SimpleStore
- EXT核心API详解Ext.data(八)- Connection/Ajax/Record javascript
- 使用FormData进行Ajax请求异步上传图片案例
- 如何解决chrome 等浏览器不支持本地ajax请求的问题
- 通过Ajax方式上传文件,使用FormData进行Ajax请求
- ajax 请求后台数据(及使用FormData对象提交表单及上传图片)
- 使用html+ajax+formdata+SpringMVC实现单个文件,和多个文件上传功能
- Ext.data库中几个常用类的原理及其使用
- Ext 中使用Ajax
- vuejs使用FormData对象,ajax上传图片文件
- 上传文件,使用FormData进行Ajax请求,jsoncallback跨域
- 使用Ajax技术从本地取回xml文件信息
- 配置Chrome支持本地(file协议)的AJAX请求
- 在Struts 2中怎样使用使用JSON Ajax支持
- 让 Chrome 支持 Ajax 本地访问
- AjaxControlToolkit 微软出的ajax.net 工具使用教程十一 FilteredTextBoxExtender(筛选) 控件的使用