123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- 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 */
|