Saiku ui-settings接口404错误避免

自己手动编译的saiku ,不知道为什么前端总是报错   /saiku/rest/saiku/info/ui-settings  404NotFound

于是我就去查了查后台接口 ,确实没有此请求对应的接口呀 ui-settings

因为不是特别清楚接口做了什么,所以就从前端处理此问题啦

ui-settings 解析

>>获取动态CSS的接口 URL:/saiku/rest/saiku/info/ui-settings

>>接下来当然还是要访问这个接口啦

 |——这么说吧,我如果成功success了,我要做以下的事:|——加载所有的JS[plugins.size次异步请求]|——加载所有的CSS[css.size次异步请求]|——如果我不小心失败error|——我就只能加载所有的JS[plugins.size次异步请求]啦,你总不能要求我加载获取失败的CSS吧

  

解决方案

在js文件 Saiku.js (/saiku-ui/js/saiku/Saiku.js)中,我们每次请求 ui-settings接口都是失败,为了避免页上报错,我们就直接加载所有的js了,就不去加在所有的css啦

更改 if (!Settings.BIPLUGIN) { .. } 代码段如下:

/*** Dynamically load plugins!** @type {PluginCollection}*/
if (!Settings.BIPLUGIN) {$(document).ready(function() {var plugins = new PluginCollection();plugins.fetch({success: function() {var i = plugins.size();var j = 0;plugins.each(function(log) {j = j + 1;if (log.attributes.path !== 'js/saiku/plugins/I18n/plugin.js') {jQuery.ajax({async: false,type: 'GET',url: log.attributes.path,data: null,success: function() {if (j === i) {if (Settings.CSS !== undefined) {Saiku.loadCSS(Settings.CSS, null);}Saiku.session = new Session({}, {username: Settings.USERNAME,password: Settings.PASSWORD});Saiku.toolbar = new Toolbar();}},dataType: 'script'});}else {if (j === i) {if (Settings.CSS !== undefined) {Saiku.loadCSS(Settings.CSS, null);}Saiku.session = new Session({}, {username: Settings.USERNAME,password: Settings.PASSWORD});Saiku.toolbar = new Toolbar();}}});}});});
}

  

完整的saiku.js文件如下:(修改后的)

/**   Copyright 2012 OSBI Ltd**   Licensed under the Apache License, Version 2.0 (the "License");*   you may not use this file except in compliance with the License.*   You may obtain a copy of the License at**       http://www.apache.org/licenses/LICENSE-2.0**   Unless required by applicable law or agreed to in writing, software*   distributed under the License is distributed on an "AS IS" BASIS,*   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.*   See the License for the specific language governing permissions and*   limitations under the License.*//*** Central object for handling global application state*/
var Saiku = {/*** View which manages toolbar interactions*/toolbar: {},/*** View which handles tabs*/tabs: new TabSet(),/*** Stop the intro plugin when it finishes*/introDone: false,/*** Saiku SplashScreen*/splash: new SplashScreen({ toolbar: this.toolbar }),/*** Model which handles session and authentication*/session: null,/*** Global event bus*/events: _.extend({}, Backbone.Events),/*** Collection of routers for page fragments*/routers: [],/*** Create a new variable for Leaflet interactive maps*/leaflet: (typeof L !== 'undefined') ? L : {},/*** Convenience functions for blocking the UI*/ui: {block: function(message) {$('.processing_message').html(message);$('.processing_message').removeClass('i18n_translated').addClass('i18n');Saiku.i18n.translate();$('.processing, .processing_container').show();},unblock: function() {$('.processing, .processing_container, .blockOverlay').hide();// Fix for Internet Explorer 10 UIBlock issue$('.blockUI').fadeOut('slow');}},/*** Outputs a message to the Web Console*/log: function(channel, item) {if (console && console.log) {console.log('Logging for: ' + channel);if (item) {console.log(item);}}},/*** Outputs an error message to the Web Console*/error: function(channel, item) {if (console && console.error) {console.error('Logging for: ' + channel);console.error(item);}},/*** Defines utility methods to work with the query string of a URL** @example:**    Put in your URL:*    http://<YOUR_MACHINE_IP>:8080/?splash=false**    var paramsURI = Saiku.URLParams.paramsURI();**    if (Saiku.URLParams.contains({ splash: paramsURI.splash })) {*        // Do something...*    }*/URLParams: {buildValue: function(value) {if (/^\s*$/.test(value))           { return null; }if (/^(true|false)$/i.test(value)) { return value.toLowerCase() === 'true'; }if (isFinite(value))               { return parseFloat(value); }return value;},joinArrayValues: function(values) {if (values.length === 2) {return values[1];}else {return values[1] + '=' + values[2];}},paramsURI: function() {var paramsURI = {};var couples = window.location.search.substr(1).split('&');var lenCouples = couples.length;var keyId;var keyValue;if (window.location.search.length > 1) {for (keyId = 0; keyId < lenCouples; keyId++) {keyValue = couples[keyId].split('=');paramsURI[decodeURIComponent(keyValue[0])] = keyValue.length > 1// ? this.buildValue(decodeURIComponent(keyValue[1]))? this.buildValue(decodeURIComponent(this.joinArrayValues(keyValue))): null;}}return paramsURI;},equals: function() {var params = Array.prototype.slice.call(arguments);var paramsURI = this.paramsURI();if (_.isEqual(paramsURI, params[0])) {return true;}else {return false;}},contains: function() {var params = Array.prototype.slice.call(arguments);var paramsURI = this.paramsURI();var common = {};for (var key in paramsURI) {if (paramsURI.hasOwnProperty(key)) {if (params[0][key] && paramsURI[key] === params[0][key]) {common[key] = params[0][key];}}}if (_.isEqual(common, params[0])) {return true;}else {return false;}}},/*** A function for loading CSS asynchronously** @example:**    Saiku.loadCSS('PATH_OF_YOUR_CSS');*/loadCSS: function(href, media) {var cssNode = window.document.createElement('link');var ref = window.document.getElementsByTagName('script')[0];cssNode.rel = 'stylesheet';cssNode.href = href;// Temporarily, set media to something non-matching to// ensure it'll fetch without blocking rendercssNode.media = 'only x';// Inject linkref.parentNode.insertBefore(cssNode, ref);// Set media back to `all` so that the// stylesheet applies once it loadssetTimeout(function() {cssNode.media = media || 'all';});return cssNode;},/*** A function for asynchronously loading JavaScript files** @example:**    Saiku.loadJS('PATH_OF_YOUR_JS');*/loadJS: function(src, callback) {var scriptNode = window.document.createElement('script');var ref = window.document.getElementsByTagName('script')[0];scriptNode.src = src;scriptNode.async = true;// Inject scriptref.parentNode.insertBefore(scriptNode, ref);// if callback...if (callback && typeof(callback) === 'function') {scriptNode.onload = callback;}return scriptNode;},/*** Converts value using a mask** @example:**    Saiku.toPattern(1099911111, '(99) 9999-9999');  // -> (10) 9991-1111*    Saiku.toPattern(12122000, '99/99/9999');        // -> 12/12/2000*    Saiku.toPattern(99911111101, '999.999.999-99'); // -> 999.111.111-01*    Saiku.toPattern('ABC1234', 'AAA-9999');         // -> ABC-1234*/toPattern: function(value, opts) {var DIGIT = '9';var ALPHA = 'A';var ALPHANUM = 'S';var output = (typeof opts === 'object' ? opts.pattern : opts).split('');var values = value ? value.toString().replace(/[^0-9a-zA-Z]/g, '') : '';var index = 0;var len = output.length;for (var i = 0; i < len; i++) {if (index >= values.length) {break;}if ((output[i] === DIGIT && values[index].match(/[0-9]/)) ||(output[i] === ALPHA && values[index].match(/[a-zA-Z]/)) ||(output[i] === ALPHANUM && values[index].match(/[0-9a-zA-Z]/))) {output[i] = values[index++];}else if (output[i] === DIGIT ||output[i] === ALPHA ||output[i] === ALPHANUM) {output = output.slice(0, i);}}return output.join('').substr(0, i);},/*** Converts value using a mask** @example:**    Saiku.replaceString('World', 'Web', 'Saiku Analytics World'); // -> Saiku Analytics Web*/replaceString: function(oldS, newS, fullS) {var len = fullS.length;for (var i = 0; i < len; i++) {if (fullS.substring(i, i + oldS.length) === oldS) {fullS = fullS.substring(0, i) + newS + fullS.substring(i + oldS.length, fullS.length);}}return fullS;},/*** Remove brackets** @example:**    Saiku.removeBrackets('[Time].[Time].[Year]'); // -> Time.Time.Year*/removeBrackets: function(value) {var str = value.toString();return str.replace(/[\[\]]/gi, '');},/*** Trim first or last char or both** @example:**    Saiku.trimFirstLastChar('Saiku Analytics', 'first'); // -> aiku Analytics*    Saiku.trimFirstLastChar('Saiku Analytics', 'last');  // -> Saiku Analytic*    Saiku.trimFirstLastChar('Saiku Analytics');          // -> aiku Analytic*/trimFirstLastChar: function(value, trimPosChar) {var str = value.toString();if (trimPosChar === 'first') {return str.substring(1, (str.length));}else if (trimPosChar === 'last') {return str.substring(0, (str.length - 1));}else {// Trim first and last charreturn str.substring(1, (str.length - 1));}}
};/*** Saiku Singleton pattern*/
Saiku.singleton = (function() {'use strict';var instance;Saiku.singleton = function() {if (instance) {return instance;}instance = this;this.set = function(data) {this.data = data;};this.get = function() {return this.data;};};return Saiku.singleton;
}());/*** Setting this option to true will fake PUT and DELETE requests* with a HTTP POST, and pass them under the _method parameter.* Setting this option will also set an X-HTTP-Method-Override header* with the true method. This is required for BI server integration*/
Backbone.emulateHTTP = false;/*** Dynamically load plugins!** @type {PluginCollection}*/
/**
if (!Settings.BIPLUGIN) {$(document).ready(function() {var plugins = new PluginCollection();plugins.fetch({success: function() {var settingsoverride = new SettingsOverrideCollection();settingsoverride.fetch({success: function() {var i = plugins.size();var j = 0;plugins.each(function(log) {j = j + 1;if (log.attributes.path !== 'js/saiku/plugins/I18n/plugin.js') {jQuery.ajax({async: false,type: 'GET',url: log.attributes.path,data: null,success: function() {if (j === i) {var k = settingsoverride.size();var l = 0;settingsoverride.each(function(log) {l = l + 1;for (var key in log.attributes) {if (log.attributes.hasOwnProperty(key)) {Settings[key] = log.attributes[key];}}if (Settings.CSS !== undefined) {Saiku.loadCSS(Settings.CSS, null);}if (k === l) {Saiku.session = new Session({}, {username: Settings.USERNAME,password: Settings.PASSWORD});Saiku.toolbar = new Toolbar();}});}},dataType: 'script'});}else {if (j === i) {var k = settingsoverride.size();var l = 0;settingsoverride.each(function(log) {l = l + 1;for (var key in log.attributes) {if (log.attributes.hasOwnProperty(key)) {Settings[key] = log.attributes[key];}}if (Settings.CSS !== undefined) {Saiku.loadCSS(Settings.CSS, null);}if (k === l) {Saiku.session = new Session({}, {username: Settings.USERNAME,password: Settings.PASSWORD});Saiku.toolbar = new Toolbar();}});}}});},error: function() {var i = plugins.size();var j = 0;plugins.each(function(log) {j = j + 1;if (log.attributes.path !== 'js/saiku/plugins/I18n/plugin.js') {jQuery.ajax({async: false,type: 'GET',url: log.attributes.path,data: null,success: function() {if (j === i) {if (Settings.CSS !== undefined) {Saiku.loadCSS(Settings.CSS, null);}Saiku.session = new Session({}, {username: Settings.USERNAME,password: Settings.PASSWORD});Saiku.toolbar = new Toolbar();}},dataType: 'script'});}else {if (j === i) {if (Settings.CSS !== undefined) {Saiku.loadCSS(Settings.CSS, null);}Saiku.session = new Session({}, {username: Settings.USERNAME,password: Settings.PASSWORD});Saiku.toolbar = new Toolbar();}}});}});}});});
}
*//*** Dynamically load plugins!** @type {PluginCollection}*/
if (!Settings.BIPLUGIN) {$(document).ready(function() {var plugins = new PluginCollection();plugins.fetch({success: function() {var i = plugins.size();var j = 0;plugins.each(function(log) {j = j + 1;if (log.attributes.path !== 'js/saiku/plugins/I18n/plugin.js') {jQuery.ajax({async: false,type: 'GET',url: log.attributes.path,data: null,success: function() {if (j === i) {if (Settings.CSS !== undefined) {Saiku.loadCSS(Settings.CSS, null);}Saiku.session = new Session({}, {username: Settings.USERNAME,password: Settings.PASSWORD});Saiku.toolbar = new Toolbar();}},dataType: 'script'});}else {if (j === i) {if (Settings.CSS !== undefined) {Saiku.loadCSS(Settings.CSS, null);}Saiku.session = new Session({}, {username: Settings.USERNAME,password: Settings.PASSWORD});Saiku.toolbar = new Toolbar();}}});}});});
}var SaikuTimeLogger = function(element) {this._element = $(element);this._timestamps = [];this._events = [];
};SaikuTimeLogger.prototype.log = function(eventname) {var time = (new Date()).getTime();if (!eventname) {eventname = 'Unknown';}if (this._timestamps.length > 0) {var lastTime = this._timestamps[this._timestamps.length -1];if ((time - lastTime) > 1) {this._element.append('<div>' + (time - lastTime) + ' ms ' + eventname + ' (previous: ' + this._events[this._events.length -1]  + ' )</div>');}}this._timestamps.push(time);this._events.push(eventname);
};

  

转载于:https://www.cnblogs.com/DFX339/p/10861807.html

Saiku ui-settings接口404错误避免(二十九)相关推荐

  1. Swagger UI 3.0 404 错误

    Swagger UI 3.0 404 错误 访问:http://localhost:8080/swagger-ui.html 显示 This application has no explicit m ...

  2. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十九:LCD模块

    实验二十九:LCD模块 据说Alinx 301支持 7"TFT,好奇的朋友一定疑惑道,它们3.2"TFT以及7"TFT等两者之间究竟有何区别呢?答案很简单,前者自带控制器 ...

  3. SAP UI5 应用开发教程之二十九 - SAP UI5 的路由和导航功能介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  4. 【零基础学Java】—final关键字与四种用法(二十九)

    [零基础学Java]-final关键字与四种用法(二十九) 一.final关键字 final关键字代表最终.不可改变的 常见的四种用法: 可以用来修饰一个类 可以用来修饰一个方法 可以用来修饰一个局部 ...

  5. WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]

    原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...

  6. BetaFlight模块设计之二十九:滤波模块分析

    BetaFlight模块设计之二十九:滤波模块分析 滤波模块 滤波类型 1. slewFilter 2. simpleLowpassFilter 3. laggedMovingAverage 4. p ...

  7. (二十九 ~ 三十一)巴菲特与索罗斯的投资习惯:投资习惯

    作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai (一)巴菲特与索罗斯的投资习惯:思考习惯的力量 (二)巴菲特与索罗斯的投资习惯:七种致命的投资信念 (三 ...

  8. 实验二十九 ISATAP隧道配置

    实验二十九 ISATAP隧道配置 实验内容: 路由器ISATAP以太口连接IPv6网络和IPv4网络,通过ISATAP隧道将IPv6的数据包封 装到IPv4的数据包中,实现IPv6 Host和 ISA ...

  9. 美学心得(第二百二十九集)罗国正

    美学心得(第二百二十九集) 罗国正 (2021年10月) 2999.清朝鉴赏家陆时化,字润之,号听松,是江苏太仓人.他的美学思想,非常值得大家关注.研究.现将他的观点摘要如下: 1.他强调先天文化之根 ...

最新文章

  1. Android中有关Handler的总结
  2. Android上关于view的事件问题
  3. PHP框架CodeIgniter之连接MS Sqlserver2014及URL Rewrite问题解决
  4. cuda 历史版本下载
  5. Git:与GitHub搭配及SSH登录
  6. 原因以及如何避免产生僵尸进程
  7. 真实项目中 ThreadLocal 的妙用
  8. app inventor调用图像识别_+AI场景,3步懂图像识别产品
  9. 全志a33android编译,编译lichee - 全志A33的环境搭建
  10. 如何使用html如何安装,node.js – 如何使用全球安装的grunt-html?
  11. 一文搞懂常见概率分布的直觉与联系
  12. 将本地电脑文件复制到虚拟机系统中详细方法
  13. QQ定时发消息vbs代码
  14. 华为获颁中国首个5G基站设备进网许可证:可支持中国规模部署;IBM推出新一代企业平台Z15;Testin最新AI产品发布……...
  15. UVM寄存器模型:reg adapter实现和集成
  16. ubuntu16.04中 vim8 backspace键删除功能失效
  17. 阿里云环境(CentOS7.6)部署Zabbix5.0 Agent2
  18. TeamTalk部署问题及解决方案
  19. Python-openpyxl之二次封装
  20. oracle 6i,Oracle Reports 6i培训教程.doc

热门文章

  1. DoS网络攻击的类型
  2. 玩转Jetson Nano(二):远程桌面
  3. 记第七届ACM校赛-回忆
  4. 【面经】2019汇顶科技(固件开发)、地平线机器人(嵌入式)面经
  5. hurd和linux内核区别,GNU Guix “放弃” Linux 内核 Hurd 内核“取而代之”
  6. 此beta版已额满_今日热闻 | 微软表示每月产生近3万个Bug、小米10青春版采用水滴屏、MIUI 12便签升级、优麒麟20.04 LTS发布...
  7. BUC算法简介与python实现
  8. 软件的注册码及清除电脑垃圾的文件
  9. 自动化运维-Ansible(redhat 8)
  10. vue中使用海康实时监控详细代码