`
crabdave
  • 浏览: 1294740 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用localXHR.js让ExtJS 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 */

分享到:
评论
4 楼 wilhard 2014-07-27  
需要HTTP服务器才可以
3 楼 wmj007 2012-05-29  
wmj007 写道
我使用这个方法,文件配置好后,我直接打开index.html一直是加载状态,怎么回事?

我只能把这个部署到tomcat才可以,请指教
2 楼 wmj007 2012-05-29  
我使用这个方法,文件配置好后,我直接打开index.html一直是加载状态,怎么回事?
1 楼 laitaogood 2009-02-26  
由于localXHR强行修改了响应状体,以此使得EXT可以继续执行下去。
那是否可以这样认为:设计一定的数据结构用文件存储,这样就可以不涉及后台而完成某些小应用。因为在浏览器解释执行的JS可以去修改本地的文件。

我的一点设想,呵呵。

相关推荐

    ext-2.0.2含localXHR.rar

    "localXHR.js"的工作原理是通过模拟XMLHttpRequest对象,使得开发者可以在本地文件系统上进行读取、写入或删除操作。这对于测试数据加载、存储或者API调用的逻辑非常实用,尤其是对于那些基于JSONP或者CORS(跨源...

    localXHR.js

    localXHR.js

    localXHR

    Ext2.0文档下载后在本地不能阅读,下载localXHR.js放在docs目录下然后在index.html中加入&lt;script src="localXHR.js"&gt;,要放在extall.js后面。

    JavaScript - Fetch.js、JavaScript - jQuery、JavaScript - XHR.js.zip

    在`JavaScript - XHR.js`中,发送短信验证码可能如下: ```javascript var xhr = new XMLHttpRequest(); xhr.open('POST', 'https://api.example.com/sms/send', true); xhr.setRequestHeader('Content-Type',...

    Ajax-xhr.js.zip

    Ajax-xhr.js.zip,js是使用xmlhttprequest发出ajax/http请求的库()。,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新...

    JavaScript - XHR实现短信验证码注册登录完整示例:JavaScript - XHR.js和附件说明

    XHR(XMLHttpRequest)是Web开发中的一个重要工具,用于在不刷新整个页面的情况下与服务器进行异步数据交换,这种技术通常被称为AJAX(Asynchronous JavaScript and XML),虽然现在XML已经不是数据交换的主要格式,...

    EXT2.0在本地浏览API的插件

    1. **引入插件**:首先,需要在EXT2.0应用的页面中引入`localXHR.js`文件,确保该插件可被EXT框架识别和使用。 2. **创建本地请求对象**:在EXT2.0中,通常我们使用`Ext.Ajax`来发送AJAX请求。对于本地文件,我们...

    xhr.js:最小的 XmlHttpRequest Javascript 微库

    xhr.js 这是有史以来最小的 XmlHttpRequest Javascript 微型库。 曾经! 未压缩:781 字节缩小:442 字节缩小 + GZ 压缩:329 字节支持所有浏览器: 火狐 1.0+ Chrome 1+ 浏览器 7+ 歌剧Safari 1.2+ 不支持 IE5 和 ...

    解决extjs API文档不断Loading

    文件“localXHR.js”可能是ExtJS用于处理本地数据请求的组件,如果这个文件出现问题,可能会导致文档加载异常。检查该文件是否正确加载,或者是否有语法错误或异常。 5. **开发工具调试**: 使用浏览器的开发者...

    ext文档离线访问方法

    在文件名称列表中,“localXHR.js”是一个关键文件,这可能是EXTJS中用于处理本地XMLHttpRequest请求的模块。在离线模式下,EXTJS可能会使用类似的技术来模拟网络请求,从本地缓存中读取数据,而不是向服务器发送...

    xhr.base:使用xhr调用JQuery ajax

    在使用xhr.base之前,确保已经引入了jQuery的基础库,例如jQuery-3.4.1.min.js。jQuery是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画制作以及Ajax交互等多个方面。xhr.base库是建立在这个基础上,...

    Schema Docs ExtJS 4.0

    虽然本地Web服务器不是使用Ext JS 4的硬性要求,但强烈建议在开发过程中使用,因为通过本地file://协议的XHR在大多数浏览器中存在跨域限制。推荐安装Apache HTTP Server作为本地Web服务器。根据你的操作系统,可以...

    Vue使用Three.js加载glTF模型的方法详解

    而Three.js是JavaScript的一个强大3D库,它提供了丰富的功能,让我们能在Web上轻松创建和显示3D内容。 首先,我们需要确保在Vue项目中安装了必要的依赖。在终端中运行以下命令: ```bash npm install three three-...

    ajax+pako.js实现gzip数据压缩上传,解决post数据过长问题

    为了解决这个问题,可以采用数据压缩技术,如gzip,配合JavaScript库pako.js来压缩数据,然后再通过Ajax发送。以下将详细讲解如何利用ajax和pako.js实现gzip数据压缩上传。 首先,理解gzip压缩原理。gzip是一种广泛...

    sockjs.min.js+stomp.min.js

    使用这两个库的组合,开发者可以在浏览器端轻松地建立到STOMP兼容消息代理的连接,比如RabbitMQ、ActiveMQ或者Apache Kafka等。以下是一个简单的使用示例: 1. 引入`sockjs.min.js` 和 `stomp.min.js`: ```html ...

    使用JavaScript调用WebService的示例

    在Web服务领域,JavaScript可以通过多种方式与WebService进行交互,从而实现数据交换和远程功能调用。本篇将深入探讨如何使用JavaScript调用WebService,帮助开发者理解和掌握这一技术。 首先,了解WebService的...

    xhr.m

    xhr.m

    查看ext的api文档

    例如,`localXHR.js`可能是一个实现本地XMLHttpRequest的模拟,这在处理异步请求时很有用。在API文档中,我们能查找`Ext.Ajax`或`Ext.data.Connection`等类,它们提供了与服务器进行数据交换的功能。 在ExtJS中,...

    xhr.zip_evidence5a8_thing1y8_xhr01_com_xhr11111.com_线性回归

    xhr.zip_evidence5a8_thing1y8_xhr01_com_xhr11111.com_线性回归这个压缩包文件包含了多个文件,主要涉及一个基于线性回归算法的预测模型。线性回归是一种广泛应用的统计学方法,用于研究两个或多个变量之间的关系,...

Global site tag (gtag.js) - Google Analytics