当前位置:首页 > 开发 > Web前端 > Ext > 正文

使用localXHR.js让ExtJS docs可以在本地浏览

发表于: 2009-02-17   作者:crabdave   来源:转载   浏览次数:
摘要: 使用localXHR.js让ExtJS docs可以在本地浏览       我们在使用ext/docs目录下的文档时报一些js的错误,导致我们不能正常浏览使用,这时我们使用localXHR.js这样一个文件来支持本地使用ajax,使用方法如下:       下载localXHR.js放在docs

使用localXHR.js让ExtJS docs可以在本地浏览

      我们在使用ext/docs目录下的文档时报一些js的错误,导致我们不能正常浏览使用,这时我们使用localXHR.js这样一个文件来支持本地使用ajax,使用方法如下:

      下载localXHR.js放在docs目录下,然后在index.html中加入<script src="./localXHR.js"></script>,注意要将该文件的引入放在extall.js后面。

    

localXHR.js文件源码如下:

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

使用localXHR.js让ExtJS docs可以在本地浏览

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
一 本系列随笔概览及产生的背景 本系列开篇受到大家的热烈欢迎,这对博主是莫大的鼓励,此为本系列
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4
今年年初Google发布了Google Docs for Android应用,随着Android平板的大规模上市,他们今天改进了
先给大家看看效果: html中引入如下: <link rel="stylesheet" type="text/css" href="static/ex
尽管 Google 倡导把所有的操作放在浏览器中,但是某二狗还是喜欢客户端的方便与快捷,就像 Gmail 可
有时候由于文件太大或太碎太多,别人会打一个压缩包发到你的邮箱。此时你不得不下载下来,解压缩,
环境 Echarts-2.0.3;Chrome-36.0.1985.125 m 目标 在本地不使web服务器的前提下,通过浏览器浏览各
刚刚开通了博客园,于是按耐不住兴奋的心情,发了第一篇博文,因为是第一次发帖,可能会有很多地方
Colabox-notepad 这是本人闲暇之余的一个实验品.目前是Beta 1.0 虽然目前android 上面的notepad 有很
分类: 科技新闻 今年春天释出的 Android 应用 Google Docs 程序,已让工作不离手的工作狂得到许多救
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号