123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787 |
- /*
- 此函数为ajax区域 要求所有后台请求来自于这里
- 应该5秒内返回给用户一个提示信息。涉及到提示信息可以传递时间参数到此ajax,如果5秒未收到结果,则弹出重试的提示。
- ajax 跨域有问题 没有到回调里面去
- */
- /*
- 变量命名编写规范:
- 变量类型 变量名称
- string str
- object obj。
- Array arr
- Element el
- bool b
- 用户信息 userinfo
- 硬盘信息 diskinfo
- 好友信息 frindinfo
- 群信息 groupinfo
- 回调callback cb
- 函数 fun
- 错误 err
- 参数数组aruguments arg
- */
- //补充错误的定义。
- //错误状态写在r.request.status里面。如果r.request.status==200,则表示成功。其余状态码表示有错误,如果是我们系统发生错误,统一状态码为500,即r.request.status==500,其他由web服务器自己决定。
- //详细错误信息在r.value里面.
- Namespace.register("U.A");
- //#region
- //所有请求的ajax对象.
- U.A.ASet = [];
- //数据库访问地址
- U.A.DataBase = {
- Reply: ["Mysql", "UseStudio_Reply"], //回复系统
- Money: ["Mysql", "UseStudio_Pay"], //交易系统
- Develop: ["Mysql", "UseStudio_Develop"] //在线编程平台
- };
- //云端访问地址
- U.A.backAddress = {
- //前端系统统一处理
- UseStudioManage: "http://main.1473.cn/Uses.ashx", //main
- UseStudioDisk: "http://main.1473.cn/Uses.ashx", //disk
- pb: "http://main.1473.cn/Uses.ashx", //学习系统
- Blog: "http://main.1473.cn/Uses.ashx", //blog
- Application: "http://main.1473.cn/Uses.ashx", //站外应用
- ABlog: "http://main.1473.cn/admin.ashx", //admin blog
- APB: "http://main.1473.cn/admin.ashx", //admin pb
- AUser: "http://main.1473.cn/admin.ashx", //admin user
- ADisk: "http://main.1473.cn/admin.ashx", //admindisk
- AApp: "http://main.1473.cn/admin.ashx", //application
- Verify: "http://admin.1473.cn/Verify", //admin 虚拟币
- Upload: "http://main.1473.cn/USupfile.ashx", //上传
- //后端系统处理
- Admin: "http://admin.1473.cn/Admin/Admin.ashx", //admin 自带后台
- KF: "http://admin.1473.cn/Admin/Admin.ashx", //admin 统计
- office: "http://office.1473.cn/Officetohtml.ashx", //office
- UseStudioPay: "http://pay.1473.cn/UseStudioPay.ashx", //交易
- Reply: "http://reply.1473.cn" //回复
- }
- //U.A.backAddress = {
- // office: "http://main.1473.cn/Mian.ashx", //office
- // Upload: "http://disk.1473.cn/USupfile.ashx", //上传
- // UseStudioManage: "http://main.1473.cn/Uses.ashx", //main
- // UseStudioDisk: "http://main.1473.cn/Uses.ashx", //disk
- // pb: "http://main.1473.cn/Uses.ashx", //学习系统
- // Application: "http://app.1473.cn/application.ashx", //站外应用
- // Blog: "http://main.1473.cn/Uses.ashx", //blog
- // UseStudioPay: "http://pay.1473.cn/UseStudioPay.ashx", //交易
- // Reply: "http://reply.1473.cn", //回复
- // AApp: "http://admin.1473.cn/Application/AApp.ashx", //application
- // ABlog: "http://admin.1473.cn/APB/APB.ashx", //admin blog
- // APB: "http://admin.1473.cn/APB/APB.ashx", //admin pb
- // AUser: "http://admin.1473.cn/User/Users.ashx", //admin user
- // Verify: "http://admin.1473.cn/Verify", //admin 虚拟币
- // Admin: "http://admin.1473.cn/Admin/Admin.ashx", //admin 自带后台
- // ADisk: "http://admin.1473.cn/Disk/ADisk.ashx", //admindisk
- // KF: "http://admin.1473.cn/system/KF.ashx" //admin 统计
- //}
- //#endregion
- /**
- * ajax初始化区域
- *
- * @param {string} 访问的地址
- * @param {array} 数据库地址,数据库名,存储过程名,存储过程参数的数组
- * @param {function} 回调函数
- * @param {array} 函数传参
- * @returns {object} ajax对象
- -----------这里的传参第一个为loading元素
- */
- // 删除了一个参数 UCE
- U.A.Request = $.ajax = function (str, db, cb) {
- //判断浏览器是否在线联网
- if (U.M.IsNetwork()) {
- var _ajax, //获取所有的传参,参数说明 win 当前域 、 UR ajax原对象 、 EOR 错误回调函数 、 UFN 触发的函数地址 、 UDE 服务器传参 、 UCB 回调函数 UPE 回调参数 、 UAE ajax对象属性 、 UTI当前使用时间
- _preAjax = U.A.ASet[U.A.ASet.length - 1]; //ajax对象
- //判断ajax的时间差,防止恶意用户用循环向服务器不断发送请求,导致服务器瘫痪。
- //恶意请求大于了50次,则判断此用户有恶意攻击嫌疑。
- //计算两次ajax请求的时间差
- var _ifTimeSpan;
- if (_preAjax) {
- _ifTimeSpan = new Date().getTime() - _preAjax.date > 50;
- }
- //如果第一次ajax请求,或者ajax请求小于50次。或者2次发送请求的时间差大于50毫秒,都算没有恶意请求。
- if (!_preAjax || _preAjax.timeSpan < 50 || _ifTimeSpan) { //连续发送禁止处理
- _ajax = new U.A.Request.init(arguments); //生成ajax对象
- //此处添加二级域名跨域,完全跨域,无跨域的分支。
- if (_ajax.handleDomain() === true) {
- //添加有header和无header的两个分支。
- if (_ajax.header) {
- return _ajax.createHeader(_ajax.header); //创建连接,添加header的目的是可以自己构建header
- } else {
- return _ajax.create(); //创建连接,无header分支
- }
- // return _ajax.create(_ajax.header); //创建连接,添加header的目的是可以自己构建header
- }
- }
- return { "error": "application has been breached" }; //连接过多错误
- } else { U.Alert("网络断开!"); }
- }
- /**
- * ajax初始化区域
- *
- * @param {array} ajax参数
- ----------[0] 访问的地址
- ----------[1] 服务器传参
- ----------[2] 回调函数
- ----------[3] 函数传参
- -----------这里的传参第一个为loading元素
- */
- U.A.Request.init = function (arg) { //初始化Ajax对象
- /*
- 参数说明 win 当前域 、 UR ajax原对象 、 EOR 错误回调函数 、 UFN 触发的函数地址 、 UDE 服务器传参 、 UCB 回调函数
- UPE 回调参数 、 UAE ajax对象属性 、 UTI当前使用时间
- */
- //this.win = window; // win 当前域
- //ajax原对象{ TO: _UAE, D: this.UTI, N: this.UFN, J: (_UOE && ((new Date().getTime() - _UOE.D) < 50)) ? _UOE.J + 1 : _UOE ? _UOE.J : 0 }
- //U.A.Request调用示例:U.A.Request("http://cd.1473.cn/php", ["mysql.1473.cn", "CloudSqlTestDb", "selectAllData"],function (r){})
- U.Ut.AddObj(this, {
- win: window, // win 当前域
- ajax: null, //ajax原对象{ TO: _UAE, D: this.UTI, N: this.UFN, J: (_UOE && ((new Date().getTime() - _UOE.D) < 50)) ? _UOE.J + 1 : _UOE ? _UOE.J : 0 } 在函数CA里面最后一句话会发送此ajax
- err: null, // err error是系统关键字
- url: arg[0], // url )。后台地址,形如"http://cd.1473.cn/php"。
- //ajax向后台请求的传参,其形式为:["mysql.1473.cn", "CloudSqlTestDb", "selectAllData","guid","str"],包含了数据库地址,数据库名,数据库存储过程名称,数据库参数...如果没有,则新建一个空数组,用法:var e = U.A.Request("http://cd.1473.cn/ss");.则e为后台返回的值。
- //UDE改成db
- db: arg[1] || [],
- cb: arg[2] || "", //回调函数 cb
- cbParams: arg[3], //回调参数 cbparams
- //调用方法:U.A.Request(US.Auth,"UseStudioManage.AddToLoginLog", [US.userInfo.userid || US.NU, US.NLInfo.LogAddr || "", US.ITID], U.M.apply(), [], { type: "Get", "async": false, "timeout": 1, "CONTENT-TYPE": "application/json" }); //访问日志添加消息
- header: arg[4] || "", //暂时没有用处。浏览器升级后对ajax的功能进行扩展,加入了"对head头部自定义修改"的功能。CONTENT-TYPE:application/x-www-form-urlencoded;charset=UTF-8.
- UTI: new Date() //ajax生成时间..删除,时间保存在第二个参数ajax里面。
- }); //使用参数区域
- }
- U.A.Request.init.prototype = {
- createHeader: function (header) {
- var i, _url, _isDomain, _db, _ajax, isAsync, r;
- var ajaxType = header.type; //用户请求类型,默认1473全部是post请求。
- var _USE = this.toAjaxFormat(); //生成请求参数 数据结构:
- _url = _USE[0]; //连接的后台地址 形如"http://cd.1473.cn/php"
- _db = _USE[1]; //传参参数;
- //如果不传递回调函数,则为同步请求,示例:U.A.Request(US.Auth,"UseStudioManage.AddToLoginLog", [US.userInfo.userid || US.NU, US.NLInfo.LogAddr || "", US.ITID]);。返回json数据,一直等待服务器返回,如果服务器执行1分钟,页面停顿1分钟。
- if (U.Ut.isFunction(this.cb)) {
- isAsync = true; //函数是否异步
- }
- //如果请求为get
- if (ajaxType.toUpperCase() == "GET") {
- _url += "?" + _db;
- }
- this.ajax = this.CA(_url); //生成ajax对象
- _ajax = this.ajax.systemAjax; //获取系统ajax对象
- _ajax.open(ajaxType, _url, isAsync); //设置ajax请求方法 url 是否异步
- header["CONTENT-TYPE"] = header["CONTENT-TYPE"] || "application/x-www-form-urlencoded;charset=UTF-8"
- //设置请求参数
- for (i in header) {
- if ("type,async".indexOf(i) == -1) {
- try {
- if (i in _ajax) {
- _ajax[i] = header[i];
- } else {
- _ajax.setRequestHeader(i, header[i]);
- } //设置head头部
- } catch (e) { }
- }
- }
- // 指定服务器返回数据的MIME类型 firfox设置兼容
- if (_ajax.overrideMimeType) {
- if (header["responseType"] == "blob") {
- _ajax.overrideMimeType("text/plain; charset=x-user-defined");
- } else {
- _ajax.overrideMimeType("text/html");
- }
- }
- //发送请求
- _ajax.send(_db);
- //得到服务器返回的值,一般为json,也可能为字符串。如果是异步,则走异步逻辑,否则走同步逻辑
- if (isAsync) {
- r = this["async"]();
- } else {
- r = this["sync"]();
- }
- //返回
- return _isDomain;
- },
- /**
- * Ajax对象创建
- *
- * @param {object} ajax属性
- */
- create: function () {
- var header = {};
- var i, _url, _isDomain, _db, _ajax, isAsync, r;
- var ajaxType = "POST"; //用户请求类型,默认1473全部是post请求。
- var _params = this.toAjaxFormat(); //生成请求参数 数据结构:
- _url = _params[0]; //连接的后台地址 形如"http://cd.1473.cn/php"
- _db = _params[1]; //传参参数;
- //如果不传递回调函数,则为同步请求,示例:U.A.Request(US.Auth,"UseStudioManage.AddToLoginLog", [US.userInfo.userid || US.NU, US.NLInfo.LogAddr || "", US.ITID]);。返回json数据,一直等待服务器返回,如果服务器执行1分钟,页面停顿1分钟。
- if (U.Ut.isFunction(this.cb)) {
- isAsync = true; //函数是否异步
- }
- //如果请求为get
- if (ajaxType.toUpperCase() == "GET") {
- _url += "?" + _db;
- }
- //设置请求超时时间
- if (isAsync) {
- // 给header对象添加属性
- header.timeout = 90000;
- header.ontimeout = function () { this.AE(); }
- }
- //指定相应的http内容类型
- // header["CONTENT-TYPE"] = "application/x-www-form-urlencoded;charset=UTF-8";
- this.ajax = this.CA(_url); //生成ajax对象
- _ajax = this.ajax.systemAjax; //获取系统ajax对象
- _ajax.open(ajaxType, _url, isAsync); //设置ajax请求方法 url 是否异步
- // 指定服务器返回数据的MIME类型 firfox设置兼容
- _ajax.setRequestHeader("CONTENT-TYPE", "application/x-www-form-urlencoded;charset=UTF-8");
- // 指定服务器返回数据的MIME类型 firfox设置兼容
- if (_ajax.overrideMimeType) {
- _ajax.overrideMimeType("text/html");
- }
- //发送请求
- _ajax.send(_db);
- //得到服务器返回的值,一般为json,也可能为字符串。
- if (isAsync) {
- r = this["async"]();
- } else {
- r = this["sync"]();
- }
- //返回
- return r;
- },
- /**
- * 根据请求的url判断域名是否存在跨域。三种跨域情况
- * @return
- */
- handleDomain: function () {
- //1、二级域名跨域,一般是a.1473.cn访问b.1473.cn。。可能是正常访问,也可能是iframe访问。,
- //2、完全跨域。www.a.com访问www.b.com。
- //3、没有跨域的情况
- var _isDomain, _url, _frame;
- var _params = this.toAjaxFormat(); //生成请求参数 数据结构:
- _url = _params[0]; //连接的后台地址 形如"http://cd.1473.cn/php"
- _isDomain = this.isDomain(_url);
- //1473跨域处理,判断是否是1473域,如果不是,则是外域调用
- if (_isDomain[0] && !_isDomain[1]) { // 判断是否是1473主域
- //如果是1473域的处理
- _frame = window.frames; //所有加载的域,对1473域下所有iframe进行循环,目的是找到可跨域的iframe。
- for (i = 0; i < _frame.length; i++) {
- try {
- if (!_url.indexOf(_frame[i].location.protocol + "//" + _frame[i].location.host)) { //找到指定的跨域
- return _frame[i].U.A.Request(this.url, this.db, this.cb, this.cbParams, this.header); //跨域获取
- }
- } catch (e) { }
- }
- }
- //完全跨域判断非1473的域名,
- else if (!_isDomain[1] && _url.indexOf("1473.cn") > -1 && $("#U_Domain")[0]) { //其他域名跨域处理
- //其他站点,跨域形式访问:例如:http://a.com/ 在页面中调用U.A.Request(US.Auth,"UseStudioManage.AddToLoginLog", [US.userInfo.userid || US.NU, US.NLInfo.LogAddr || "", US.ITID]);
- this.goDomain(); //外站跨域调用
- return false;
- }
- return true;
- },
- //把传参格式转换为Ajax请求格式
- // 刑如:US.Auth,"UseStudioManage.AddToLoginLog", [US.userInfo.userid || US.NU, US.NLInfo.LogAddr || "", US.ITID] 转换为下面的格式
- // 格式:"http://main.1473.cn/Uses.ashx",US.userInfo.userid || US.NU +"&" + US.NLInfo.LogAddr || ""+ "&" + US.ITID, "http://main.1473.cn/Uses.ashx"(默认请求地址,如果第一个参数不在U.A.backAddress中,则使用第三个)
- /*
- * @return {array} 域、 加密参数、 默认地址 例:
- */
- toAjaxFormat: function () {
- var _userInfo, _useUrl, _defaultUrl,
- _requestObj = U.A.backAddress, //1473请求地址区域
- _url = this.url, //这个是请求参数
- _params = U.M.SplitArray(this.db.concat()), //参数进行加密
- _source = _url.indexOf(":") > -1 && U.M.IsUrl(_url), //判断来源是否是链接
- _requestArr = _url.split("."), //这里拆分1473的请求
- _reqConfig = U.A.DataBase[_requestArr[0]]; //非主系统的外系统的请求配置
- if (_source || _reqConfig) { //非指定云端链接
- if (_reqConfig) {
- _url = _requestObj[_requestArr[0]];
- _params += "&DBTYPE=" + _reqConfig[0] + "&DBNAME=" + _reqConfig[1]; //1473主站点插件区域
- }
- _useUrl = _url;
- _params = "mode=" + _params; //设置传参
- }
- else if (_requestArr && _requestArr[0] && _requestObj[_requestArr[0]]) { //云端的请求
- _defaultUrl = _requestObj[US.Auth, "UseStudioManage"]; //默认地址
- _useUrl = _requestObj[_requestArr[0]]; //选择的地址
- _params = "functionname=" + _url + "&" + _url + "=" + _params;
- }
- else {
- _useUrl = window.location;
- _useUrl = window.location ? _useUrl.protocol + "//" + _useUrl.host + "/" + _url : "./" + _url;
- _params = "mode=" + _params;
- } //外站请求
- //1473传参 + this.LIDZ()
- try {
- //用户个人信息
- if (parent.US) {
- //传递用户id,后台安全判断及处理
- _userInfo = parent.US.userInfo;
- if (_userInfo && _userInfo.UserId) {
- _params += "&UserId=" + _userInfo.UserId + "&LoginId=" + _userInfo.LoginId;
- }
- }
- else {
- _userInfo = {};
- }
- }
- catch (e) { _userInfo = {}; }
- //设置1473项目传参的id
- _params += "&PageId=" + US.PageId + "&LoginId=" + US.SystemId;
- //请求的地址,参数,请求的后台函数名
- return [_useUrl, _params, _defaultUrl];
- },
- //完全跨域设置(此处非1473域名区域)处理区域
- goDomain: function () {
- // 获取回调参数
- var _loading = this.cbParams ? this.cbParams[0] : null;
- // 加载loading
- if (_loading) {
- U.MD.loading(_loading[0])
- } else {
- U.MD.loading(_loading, _loading[1])
- }
- // (_UDE) && (U.MD.loading(_UDE[0] || _UDE, _UDE[1])); //设置loading
- // 页面消息传递
- U.MN.message({
- "obj": "#U_Domain",
- "Sender": true, //消息发送
- "me": U.M.apply(this, function (_data) { //消息回调
- var _USE = _data[2].split("=");
- //后台设置了cookie 前台同时响应
- if (_USE[1] == "") {
- U.M.Cookies.del(_USE[0]);
- } else {
- U.M.Cookies.set(_data[2]);
- }
- document.wincookie = _data[2]; //记录cookie
- (this.AE) && (this.AE(true, _data[0])); //回调函数
- })
- }).post([this.url, this.db], "domain"); //跨域传参
- },
- /**
- * 获取链接地址
- *
- * @param {url} 连接地址
- -----------[0] 是否为1473域
- -----------[0] 是否为主域
- */
- isDomain: function (URL) {
- var _url;
- //用本地html打开网站时,没有window.location。
- if (window.location) {
- //获取当前域名地址栏,不包含目录结构。例如:
- _url = window.location.protocol + "//" + window.location.host; //当前域
- if (_url.indexOf("1473.cn") > -1 && URL.indexOf("1473.cn") > 0) {
- return [true, !URL.indexOf(_url)];
- } else {
- return [false, false];
- }
- // return [(_url.indexOf("1473.cn") > -1 && URL.indexOf("1473.cn") > 0), !URL.indexOf(_url)];
- }
- // else { return [false, false]; }
- },
- /**
- * 创建Ajax对象
- *
- * @param {url} 连接地址
- * @returns {object} ajax对象
- */
- CA: function (url) {
- var i, _ajax, _xhr, _url, _ajaxObj = U.A.ASet,
- _preAjax = _ajaxObj[_ajaxObj.length - 1],
- _xhr = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; //ajax对象
- // 获取当前域名
- if (window.location) {
- _thisUrl = window.location.protocol + "//" + window.location.host;
- } else {
- _thisUrl = "";
- }
- //获取可以使用的Ajax对象
- for (i = 0; i < _ajaxObj.length; i++) { //在ajax里找到使用对象
- if ((_ajax = _ajaxObj[i].systemAjax).readyState == 4) {
- _ajax.onreadystatechange = U.M.apply(); //设置回调为空
- _ajax.abort(); //停止
- return _ajaxObj[i];
- }
- }
- //这里创建Ajax对象
- try { _ajax = new window.XMLHttpRequest(); } //浏览器默认ajax对象
- catch (e) {
- for (i = 0; i < _xhr.length; i++) { //ie6-系列使用
- try {
- _ajax = new ActiveXObject(_xhr[i]);
- break;
- } catch (e) { }
- }
- }
- //h5创建跨域ajax
- if (url.indexOf(_thisUrl) == -1 && window.XDomainRequest) {
- _ajax = new window.XDomainRequest();
- }
- //疑似非法ajax请求次数记录
- var timeSpan;
- //如果当前发送的ajax请求和上一次发送的ajax请求时间小于0.05秒。则判断为循环非法操作。
- if (_preAjax && ((new Date().getTime() - _preAjax.date) < 50)) {
- timeSpan = _preAjax.timeSpan + 1; //恶意攻击+1.
- } else {
- if (_preAjax) {
- timeSpan = _preAjax.timeSpan;
- } else {
- timeSpan = 0;
- }
- }
- //(_preAjax && ((new Date().getTime() - _preAjax.D) < 50)) ? _preAjax.J + 1 : _preAjax ? _preAjax.J : 0;
- //生成ajax请求
- var ajax = {
- systemAjax: _ajax, //系统ajax new window.XMLHttpRequest(); //systemajax
- date: this.UTI, //当前时间 new Date(); //date
- fun: this.url, //向后台发送请求的函数名称。 //fun
- timeSpan: timeSpan //与上一次发送Ajax请求的时间差距。 //timespan
- };
- _ajaxObj.push(ajax); //把这次的ajax请求记录到数组,目的是方便以后获取查询过的ajax。1、为了找错误,2、为了判断ajax的时间差,防止恶意用户用循环向服务器不断发送请求,导致服务器瘫痪。
- //return (_UDE[_UDE.length] = { TO: _UAE, D: this.UTI, N: this.UFN, J: (_UOE && ((new Date().getTime() - _UOE.D) < 50)) ? _UOE.J + 1 : _UOE ? _UOE.J : 0 });
- return ajax;
- },
- //设置异步请求
- async: function () {
- var _ajax = this.ajax.systemAjax, //ajax对象
- _loading = this.cbParams, //回调参数 loading
- _isUndefined = U.Ut.isUndefined(_ajax.onload), //判断兼容问题
- _cb;
- if (_isUndefined) {
- _cb = U.M.apply(this, this.AE); //回调函数设置
- }
- else {
- _cb = U.M.apply(this, this.TAC); //回调函数设置
- }
- // _cb = U.M.apply(this, this[_isUndefined ? "AE" : "TAC"]); //回调函数设置
- // 设置loading
- if (_loading && _loading[0]) {
- if (_loading[0][0]) {
- U.MD.loading(_loading[0][0], _loading[0][1]);
- } else {
- U.MD.loading(_loading[0], _loading[0][1]);
- }
- }
- // (_cbParams && _cbParams[0]) && (U.MD.loading(_cbParams[0][0] || _cbParams[0], _cbParams[0][1]));
- //设置错误和异步请求
- // 设置ajax回调函数
- if (_isUndefined) {
- _ajax.onreadystatechange = _cb;
- } else {
- _ajax.onload = _cb;
- }
- // 设置ajax错误时的处理
- try {
- _ajax.onerror = U.M.apply(this, this.OER);
- } catch (e) { }
- },
- //跨域异步使用
- TAC: function () {
- this.ajax.systemAjax.status = 200; //设置成功状态
- this.AE(true); //调用跨域统一处理
- },
- //错误处理
- OER: function () {
- this.ajax.systemAjax.status = 500; //设置错误为500
- this.AE(true); //错误处理
- },
- /**
- * 服务器异步加载成功后,得到返回值,取消loading,然后回调.
- *
- * @param {boolean} 是否可以直接通过 不进行ajax流程判断
- * @param {string} 绕过ajax流程 传参
- */
- AE: function (UTF, UST) {
- try {
- if (UTF === true || this.ajax.systemAjax.readyState == 4) { //已经加载成功
- (this.ajax) && (this.ajax.timeSpan = 0);
- var _loading = this.cbParams, //loading 元素
- _data = this.sync(UST), //ajax string 数据 生成 json数据集
- _timeSpan = (new Date()).getTime() - this.UTI.getTime(); //ajax总共耗时
- // 取消loading
- if (_loading && _loading[0]) {
- if (_loading[0][0]) {
- U.MD.uploading(_loading[0][0]);
- } else {
- U.MD.uploading(_loading[0]);
- }
- }
- // (_UPE && _UPE[0]) && (U.MD.uploading(_UPE[0][0] || _UPE[0])); //取消loading
- //访问时间太长或者出现了错误 输出控制台
- if (_timeSpan > 1000 || _data.error) {
- (U.M.Console({ "T": _timeSpan, "N": this.url, "V": _data.error }));
- }
- // (_timeSpan > 1000 || _data.error) && (U.M.Console({ "T": _timeSpan, "N": this.url, "V": _data.error })); //访问时间太长或者出现了错误 输出控制台
- //关闭连接
- if (_data.httpRequest.abort) {
- _data.httpRequest.abort();
- }
- // (_data.r.abort) && (_data.r.abort()); //关闭连接
- //回调数据
- if (this.cb && _data.value !== null) {
- this.cb.call(this.win, _data)
- }
- // (this.cb && _data.value !== null) && (this.cb.call(this.win, _data)); //回调数据
- }
- } catch (e) { U.M.Console(e); }
- },
- /**
- * 生成数据
- *
- * @param {string} 绕过ajax流程 传参
- * @return {string} 数据参数
- */
- sync: function (data) {
- var _UTF, _ajax;
- //获取ajajx对象
- if (this.ajax) {
- _ajax = this.ajax.systemAjax;
- }
- else {
- _ajax = {};
- }
- // _URE = this.ajax ? this.ajax.systemAjax : {}, //获取ajajx对象
- var _ajaxAttr = { httpRequest: _ajax, status: null, value: null, context: this.cbParams }, //ajax对象使用
- _errorFun = U.A.Error(); //ajax错误处理
- //没有值 直接设置报错
- // if (!_ajaxAttr.httpRequest) {
- // _ajaxAttr.httpRequest = { status: "504", statusText: "Gateway timeout" };
- // }
- // (!_ajaxAttr.r) && (_ajaxAttr.r = { status: "504", statusText: "Gateway timeout" }); //没有值 直接设置报错
- _ajaxAttr.value = data; //设置值
- //请求成功处理
- if (_ajax.status == 200) {
- _ajaxAttr.value = this.getBackStrToJson(); //生成返回的参数
- _UTF = _errorFun.isError(_ajaxAttr.value);
- if (_UTF) {
- _errorFun.set(_ajaxAttr.value);
- }
- }
- //错误处理.
- else {
- _ajaxAttr.status = {
- "status": _ajax.status,
- "statusText": _ajax.statusText
- };
- }
- // if (_ajaxAttr.error && this.err) {
- // this.err()
- // } else if (_UTF && this.err) {
- // this.err()
- // }
- // ((_ajaxAttr.error || _UTF) && this.err) && (this.err());
- return _ajaxAttr; //生成数据返回
- },
- /**
- * 得到后台返回的字符串,再把后台返回的字符串生成一个json对象
- *
- * @return {object} json值
- */
- getBackStrToJson: function () {
- var _ajax = this.ajax.systemAjax, //ajax对象
- _resXml = _ajax.responseXML; //xml对象
- //如果服务器返回的为xml对象
- if (_resXml) {
- _resXml = _resXml.xml
- }
- // (_resXml) && (_resXml = _resXml.xml); //如果服务器返回的为xml对象
- if (!_resXml) {
- _resXml = _ajax.responseText; //返回的值
- _resXml = U.M.toList(_resXml); //生成对象
- }
- return _resXml;
- }
- }
- //#endregion
- //#region jsonp跨域获取数据,1473的项目跨域到百度,只能通过js方式进行跨域。js引用百度的一个js,百度返回一个值。就可以跨域了。
- /**
- * jsonp跨域获取数据初始化
- *
- * @param {object} jsonp参数
- ----------[call] 回调函数
- ----------[parameter] 回调参数
- * @return {string} jsonp类对象
- */
- U.A.Jsonp = $.Jsonp = function (UDE) {
- var _UTE = new U.A.Jsonp.init(UDE); //初始化jsonp类
- _UTE.send(); //发送请求
- return _UTE;
- }
- /**
- * jsonp初始化对象
- *
- * @param {object} jsonp参数
- ----------[call] 回调函数
- ----------[parameter] 回调参数
- */
- U.A.Jsonp.init = function (UDE) { //初始化Jsonp对象
- U.Ut.AddObj(this, UDE);
- }
- U.A.Jsonp.init.prototype = {
- /**
- * jsonp发送请求数据
- *
- */
- send: function () {
- var _URL = this.url, //发送的地址
- _UCE = this.call, //发送的回调函数
- _UPE = this.parameter, //发送的参数
- UDID = U.M.getFun(U.M.apply(this, this.success)).id; //设置委托状态 等待回调
- this.UFE = U.MD.DynamicLoad(_URL + (_UCE ? "?callback=" + _UDID + "&" : "") + (_UPE ? "parameter=" + U.M.SplitArray(_UPE) : ""), "js", U.M.apply(this, this.Asyn), null, true); //请求数据等待回调
- },
- //异步加载成功
- Asyn: function () { },
- /**
- * jsonp异步回调
- *
- */
- success: function (r) {
- (this.call) && (this.call(r)); //执行回调函数
- $(this.UFE).remove(); //删除遗留的jsonp数据文件
- }
- }
- //#endregion
- //#region ajax post请求
- /**
- * post请求
- * @param {object} 传参
- ----------[url] 请求的地址
- ----------[parameter] 请求的参数
- ----------[context] 请求的回调参数
- ----------[cb] 回调函数
- * @return {object} post对象
- */
- U.A.Post = $.Post = function (UDE) {
- var _UTE = new U.A.Post.init(UDE); //初始化对象
- _UTE.send(); //发送请求
- return _UTE;
- }
- /**
- * 初始化post对象
- *
- */
- U.A.Post.init = function (UDE) {
- U.Ut.AddObj(this, UDE);
- }
- U.A.Post.init.prototype = {
- //发送请求
- send: function () {
- var i, _UDE = [],
- _URL = this.url, //请求的地址
- _UPE = this.parameter, //请求参数
- _UCE = this.context; //请求传参
- //添加参数
- if (_UPE) {
- for (i in _UPE) {
- if (_UPE.hasOwnProperty(i)) {
- _UDE.push($$("input", { "name": i, "value": _UPE[i] }));
- }
- }
- }
- //发送消息
- U.UP.uploading(_UDE, U.M.apply(this, this.success), _UCE, _URL, null, "application/x-www-form-urlencoded");
- },
- /**
- * psot请求成功回调
- * @param {object} 数据
- */
- success: function (UDE) { //异步回调
- (this.cb) && (this.cb(UDE));
- }
- }
- //#endregion
- //#endregion
- //#region 错误区域,需要在界面中显示,如何显示,先设计,后制作功能。然后重写一个函数,不需要类。
- //错误区域初始化
- U.A.Error = function () {
- return new U.A.Error.init();
- }
- //生成错误对象 错误对象的实例
- U.A.Error.init = function () {
- this.State = this.LogID = this.Value = this.Dt = this.Type = null;
- }
- U.A.Error.init.prototype = {
- /**
- * 判断对象是否为错误对象
- *
- * @return {object} json值
- */
- isError: function (UDE) {
- if (U.Ut.isObject(UDE)) { //判断是否为对象
- for (var i in this) { if (this.hasOwnProperty(i) && !(i in UDE)) { return false; } }
- return true;
- }
- return false;
- },
- /**
- * 设置错误
- *
- * @return {object} 错误值
- */
- set: function (UDE) {
- U.Ut.AddObj(this, UDE); //根据错误值添加错误
- return this;
- }
- }
- //#endregion
|