| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787 | /*此函数为ajax区域 要求所有后台请求来自于这里应该5秒内返回给用户一个提示信息。涉及到提示信息可以传递时间参数到此ajax,如果5秒未收到结果,则弹出重试的提示。ajax 跨域有问题 没有到回调里面去*//*变量命名编写规范:变量类型   变量名称string       strobject       obj。Array        arrElement      elbool         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元素*/// 删除了一个参数 UCEU.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
 |