Ext.apply( Ext.lib.Ajax , { forceActiveX:false, createXhrObject:function(transactionId) { var obj,http; try { if(Ext.isIE7 && !!this.forceActiveX){throw("IE7forceActiveX");} http = new XMLHttpRequest(); obj = { conn:http, tId:transactionId }; } catch(e) { for (var i = 0; i < this.activeX.length; ++i) { try { http = new ActiveXObject(this.activeX[i]); obj = { conn:http, tId:transactionId }; break; } catch(e) { } } } finally { return obj; } }, 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){ statObj.isError = true;} //status may not avail/valid yet. return statObj; }, handleTransactionResponse:function(o, callback, isAbort) { var responseObject; callback = callback || {}; o.status = this.getHttpStatus(o.conn); if(!o.status.isError){ /* create and enhance the response with proper status and XMLDOM if necessary */ responseObject = this.createResponseObject(o, callback.argument); } if(o.status.isError){ /* checked again in case exception was raised - ActiveX was disabled during XML-DOM creation? */ responseObject = this.createExceptionObject(o.tId, callback.argument, (isAbort ? isAbort : false)); } if (o.status.isOK && !o.status.isError) { if (callback.success) { if (!callback.scope) { callback.success(responseObject); } else { callback.success.apply(callback.scope, [responseObject]); } } } else { if (callback.failure) { if (!callback.scope) { callback.failure(responseObject); } else { callback.failure.apply(callback.scope, [responseObject]); } } } this.releaseObject(o); responseObject = null; }, createResponseObject:function(o, callbackArg) { var obj = {}; var headerObj = {}; try { var headerStr = o.conn.getAllResponseHeaders(); var header = headerStr.split('\n'); for (var i = 0; i < header.length; i++) { var delimitPos = header[i].indexOf(':'); if (delimitPos != -1) { headerObj[header[i].substring(0, delimitPos)] = header[i].substring(delimitPos + 2); } } } catch(e) { } obj.tId = o.tId; obj.status = o.status.status; obj.statusText = o.status.statusText; obj.getResponseHeader = headerObj; obj.getAllResponseHeaders = headerStr; obj.responseText = o.conn.responseText; obj.responseXML = o.conn.responseXML; if(o.status.isLocal){ o.status.isOK = ((obj.status = o.status.status = (!!obj.responseText.length)?200:404) == 200); if(o.status.isOK && (!obj.responseXML || obj.responseXML.childNodes.length == 0)){ var xdoc=null; try{ //ActiveX may be disabled if(typeof(DOMParser) == 'undefined'){ xdoc=new ActiveXObject("Microsoft.XMLDOM"); xdoc.async="false"; xdoc.loadXML(obj.responseText); }else{ var domParser = new DOMParser(); xdoc = domParser.parseFromString(obj.responseText, 'application/xml'); domParser = null; } } catch(ex){ o.status.isError = true; } obj.responseXML = xdoc; if ( xdoc && typeof (obj.getResponseHeader['Content-Type']) == 'undefined' && !!xdoc.childNodes.length ) /* Got valid nodes? then set the response header */ { obj.getResponseHeader['Content-Type'] == 'text/xml'; } } } if (typeof callbackArg !== undefined) { obj.argument = callbackArg; } return obj; }, asyncRequest:function(method, uri, callback, postData) { var o = this.getConnectionObject(); if (!o) { return null; } else { try{ o.conn.open(method, uri, true); } catch(ex){ this.handleTransactionResponse(o, callback); return o; } if (this.useDefaultXhrHeader) { if (!this.defaultHeaders['X-Requested-With']) { this.initHeader('X-Requested-With', this.defaultXhrHeader, true); } } if(postData && this.useDefaultHeader){ this.initHeader('Content-Type', this.defaultPostHeader); } if (this.hasDefaultHeaders || this.hasHeaders) { this.setHeader(o); } this.handleReadyState(o, callback); try{ o.conn.send(postData || null); } catch(ex){ this.handleTransactionResponse(o, callback);} return o; } }}); Ext.lib.Ajax.forceActiveX = (document.location.protocol == 'file:');/* or other true/false mechanism */