首页 > 其他分享 >使用localXHR.js让ExtJS docs可以在本地浏览

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

时间:2023-04-28 18:04:37浏览次数:39  
标签:status obj localXHR js callback statObj && docs var


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

标签:status,obj,localXHR,js,callback,statObj,&&,docs,var
From: https://blog.51cto.com/u_9716826/6235247

相关文章

  • JS获取table中选中某几行其中某一列数值的总和
    JS获取table中选中某几行其中某一列数值的总和一、思路1.如何获取某几行,并且可以实时变化数值?实现如下:$("input[type='checkbox']").click(function(){alert($(this).val());})2.接下来就是实现当每次触发点击事件以后,然后,计算其中的值,实现如下:<script>$(functi......
  • 关于json文件想要添加注释怎么处理
    json格式本身不支持注释,json的本意就是极简的通用数据传输。加了备注就不是极简了。1.注释用来说明这个key做什么用2.希望添加注释之后,不会影响原本的交互逻辑。比较好的方法是:json文件里面额外增加一个key"key_comment"用来描述这个key的作用。但是如果本来json文件只是一个......
  • NodeJS定时任务 注:2023-4-28更新
     使用的node-schedule 设置定时任务 引入constschedule=require('node-schedule'); 参数解析schedule.scheduleJob(******)接收六个参数,位置分别如下,如果不需要,填*号即可,*代表通配符6个占位符从左到右分别代表:秒、分、时、日、月、周几*表示通配符,匹配......
  • API 架构风格演化史:CORBA-XMLRPC(SOAP)-REST-JSONRPC-GraphQL-gRPC
    我们先来看一张 TwitterArchitecture2022CodeFirstv.sAPIFirst软件开发理念的改变下图显示了代码优先开发和API优先开发之间的差异。为什么我们要考虑API优先设计?微服务增加了系统的复杂性。我们有单独的服务来服务系统的不同功能。尽管这种体系结构促进了职责的脱钩和分......
  • js中foreach循环无法通过return返回
    varlemonadeChange=function(bills){letfiveCount=0lettenCount=0bills.forEach(element=>{if(element===5){fiveCount+=1}elseif(element===10){if(fiveCount>=1){fiveCount-=1tenCount+=......
  • GMaps.js:让你快速集成 Google Maps 服务的 jQuery 插件
    GMaps.js功能除了添加指定经纬度的标准地图之外,GMaps.js还能定义地图放大的级别,添加标注,获取当前用户的地理位置(HTML5geolocation),定义路线,绘制折线,并且实现这些功能只需要简单的几行代码。另外GMaps.js每个动作都有callback函数让你去集成自定义事件。目前GMaps.js没有详......
  • 【HarmonyOS】【JS】Tabs如何设置区分TabBar和TabContent的分割线不显示
    【关键字】Tabs,分割线 【问题描述】使用JS开发HarmonyOS应用时,使用Tabs组件,默认自带TabBar和TabContent的蓝色分割线,由于蓝色分割线样式不可设置,若不想要此蓝色分割线,如何去除蓝色分割线? 【问题分析】1、若JS使用Tabs,蓝色分割线为组件自带样式,暂不支持属性支持显示与隐藏......
  • Python关于jsonpath路径里面包含中文或进行参数化的解决方案
    jsonpath路径包含中文当jsonpath路径包含中文时,我们只需要在jsonpath路径里面把中文用引号包裹即可准备json文件{"data":[{"Details":[{"姓名":"张三"}]}......
  • jquery.liMarqee.js无缝滚动的使用问题
    引入jq、liMarquee.js和liMarquee.css文件<scriptsrc="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script><scriptsrc="./js/jquery.liMarquee.js"></script><linkrel="stylesheet&quo......
  • Dynamic crm 使用JS 更新BPF的stage。
    functionupdateProcess(CurrentRecordId,stageId){ 'usestrict'; varfetchXml=  '<fetch>'+  " <entityname='new_approval_process'>"+  "  <attributename='businessprocessflo......