localXHR.js
上传用户:zaktkj
上传日期:2022-08-08
资源大小:5770k
文件大小:6k
源码类别:

JavaScript

开发平台:

JavaScript

  1. Ext.apply( Ext.lib.Ajax ,
  2. { forceActiveX:false,
  3.   createXhrObject:function(transactionId)
  4.         {
  5.             var obj,http;
  6.             try
  7.             {
  8.             
  9. if(Ext.isIE7 && !!this.forceActiveX){throw("IE7forceActiveX");}
  10.                 http = new XMLHttpRequest();
  11.                 obj = { conn:http, tId:transactionId };
  12.             }
  13.             catch(e)
  14.             {
  15.                 for (var i = 0; i < this.activeX.length; ++i) {
  16.                     try
  17.                     {
  18.                         http = new ActiveXObject(this.activeX[i]);
  19.                         obj = { conn:http, tId:transactionId };
  20.                         break;
  21.                     }
  22.                     catch(e) {
  23.                     }
  24.                 }
  25.             }
  26.             finally
  27.             {
  28.                 return obj;
  29.             }
  30.         },
  31.         getHttpStatus: function(reqObj){
  32.         
  33.          var statObj = {  status:0
  34.          ,statusText:''
  35.          ,isError:false
  36.          ,isLocal:false
  37.          ,isOK:false };
  38.          try {
  39.          if(!reqObj)throw('noobj');
  40.         statObj.status = reqObj.status || 0;
  41.         
  42.         statObj.isLocal = !reqObj.status && location.protocol == "file:" || 
  43.             Ext.isSafari && reqObj.status == undefined;
  44.         
  45.         statObj.statusText = reqObj.statusText || ''; 
  46.         
  47.         statObj.isOK = (statObj.isLocal || 
  48.          (statObj.status > 199 && statObj.status < 300) ||
  49.           statObj.status == 304);
  50.         
  51.     } catch(e){ statObj.isError = true;} //status may not avail/valid yet.
  52.     
  53.      return statObj; 
  54.         
  55.         },
  56.         handleTransactionResponse:function(o, callback, isAbort)
  57. {
  58. var responseObject;
  59. callback = callback || {};
  60. o.status = this.getHttpStatus(o.conn);
  61.  if(!o.status.isError){
  62.   /* create and enhance the response with proper status and XMLDOM if necessary */
  63.   responseObject = this.createResponseObject(o, callback.argument);
  64.  }
  65.  
  66.  if(o.status.isError){ /* checked again in case exception was raised - ActiveX was disabled during XML-DOM creation? */
  67.    responseObject = this.createExceptionObject(o.tId, callback.argument, (isAbort ? isAbort : false));
  68.  }
  69.  if (o.status.isOK && !o.status.isError) {
  70. if (callback.success) {
  71. if (!callback.scope) {
  72. callback.success(responseObject);
  73. }
  74. else {
  75. callback.success.apply(callback.scope, [responseObject]);
  76. }
  77. }
  78.   } else {
  79. if (callback.failure) {
  80. if (!callback.scope) {
  81. callback.failure(responseObject);
  82. }
  83. else {
  84. callback.failure.apply(callback.scope, [responseObject]);
  85. }
  86. }
  87.  }
  88. this.releaseObject(o);
  89. responseObject = null;
  90. },
  91. createResponseObject:function(o, callbackArg)
  92.         {
  93.             var obj = {};
  94.             var headerObj = {};
  95.             try
  96.             {
  97.                 var headerStr = o.conn.getAllResponseHeaders();
  98.                 var header = headerStr.split('n');
  99.                 for (var i = 0; i < header.length; i++) {
  100.                     var delimitPos = header[i].indexOf(':');
  101.                     if (delimitPos != -1) {
  102.                         headerObj[header[i].substring(0, delimitPos)] = header[i].substring(delimitPos + 2);
  103.                     }
  104.                 }
  105.             }
  106.             catch(e) {
  107.             }
  108.             obj.tId = o.tId;
  109.             obj.status = o.status.status;
  110.             obj.statusText = o.status.statusText;
  111.             obj.getResponseHeader = headerObj;
  112.             obj.getAllResponseHeaders = headerStr;
  113.             obj.responseText = o.conn.responseText;
  114.             obj.responseXML = o.conn.responseXML;
  115.             if(o.status.isLocal){
  116.                 
  117.                 o.status.isOK = ((obj.status = o.status.status = (!!obj.responseText.length)?200:404) == 200);
  118.                 
  119.                 if(o.status.isOK && (!obj.responseXML || obj.responseXML.childNodes.length == 0)){
  120. var xdoc=null;
  121. try{   //ActiveX may be disabled
  122. if(typeof(DOMParser) == 'undefined'){ 
  123. xdoc=new ActiveXObject("Microsoft.XMLDOM"); 
  124. xdoc.async="false";
  125. xdoc.loadXML(obj.responseText); 
  126. }else{ 
  127. var domParser = new DOMParser(); 
  128. xdoc = domParser.parseFromString(obj.responseText, 'application/xml'); 
  129. domParser = null;
  130. }
  131. } catch(ex){ 
  132. o.status.isError = true; 
  133. }
  134. obj.responseXML = xdoc;
  135. if ( xdoc && typeof (obj.getResponseHeader['Content-Type']) == 'undefined' && 
  136. !!xdoc.childNodes.length )    /* Got valid nodes? then set the response header */
  137. {
  138. obj.getResponseHeader['Content-Type'] == 'text/xml';
  139. }
  140.    }
  141.    
  142.     }
  143.             
  144.      
  145.             if (typeof callbackArg !== undefined) {
  146.                 obj.argument = callbackArg;
  147.             }
  148.             return obj;
  149.         },
  150.         asyncRequest:function(method, uri, callback, postData)
  151.         {
  152.             var o = this.getConnectionObject();
  153.             if (!o) {
  154.                 return null;
  155.             }
  156.             else {
  157.                 try{
  158. o.conn.open(method, uri, true);
  159. } catch(ex){
  160. this.handleTransactionResponse(o, callback);
  161. return o;
  162. }
  163. if (this.useDefaultXhrHeader) {
  164.     if (!this.defaultHeaders['X-Requested-With']) {
  165. this.initHeader('X-Requested-With', this.defaultXhrHeader, true);
  166.     }
  167. }
  168. if(postData && this.useDefaultHeader){
  169.     this.initHeader('Content-Type', this.defaultPostHeader);
  170. }
  171.  if (this.hasDefaultHeaders || this.hasHeaders) {
  172.     this.setHeader(o);
  173. }
  174. this.handleReadyState(o, callback);
  175. try{ o.conn.send(postData || null);
  176. } catch(ex){ this.handleTransactionResponse(o, callback);}
  177. return o;
  178.             }
  179.         }});
  180. Ext.lib.Ajax.forceActiveX = (document.location.protocol == 'file:');/* or other true/false mechanism */