var cn12306 = { coreVersion: "1.0.0.0", baseUri: "https://kyfw.12306.cn/otn/", queryBaseUri: "http://dynamic.12306.cn/otsquery/", ajaxQueue: {}, ajaxCount: 0, getFullUri: function(url) { return url[4] === ":" || url[5] === ":" ? url : cn12306.baseUri + url; }, /** * 获取验证码 * @param {String} flag 验证码类型(sjrand|randp) * @param {Function} callback 获取后回调 * @param {String} refer Header refer * @return {Img uri} base64图片url */ loadRandCode: function(flag, callback, refer) { var url = cn12306.getFullUri(flag[4] === ":" || flag[5] === ":" ? flag : (function(f) { if (flag == "sjrand") { return "/passcodeNew/getPassCodeNew?module=login&rand=sjrand"; } else if (flag == "randp") { return "/passcodeNew/getPassCodeNew?module=passenger&rand=randp"; } Public.alert("不支持的验证码类型!"); })(flag)); refer = cn12306.getFullUri(refer || "loginAction.do?method=init"); var xhr = new window.XMLHttpRequest(); // if (isAndLiebao || isIos || isWebApp) { if (isAndLiebao || isIos) { xhr.open("GET", url, true); } else { xhr.open("GET", baseProxyUrl, true); xhr.setRequestHeader("Fish-RawUrl", url); } xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status != 200) { Public.alert("加载验证码失败,请点击验证码刷新"); } else { callback(base64.toObjectUrl(base64.encodeArrayBuffer(xhr.response), "image/jpeg")); } } }; var prefix = isAndLiebao ? "" : "Fish-"; xhr.responseType = "arraybuffer"; xhr.setRequestHeader(prefix + "Referer", refer); xhr.setRequestHeader(prefix + "User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"); xhr.setRequestHeader(prefix + "Origin", /(https?:\/\/[^\/]+\/)/.exec(url)[1]); xhr.send(null); }, /** * 获取ajax url * @param {String} url ajax url * @return {String} ajax url */ getAjaxUrl: function(url) { console.log(url) // return (isAndLiebao || isIos || isWebApp) ? cn12306.getFullUri(url) : baseProxyUrl; return (isAndLiebao || isIos) ? cn12306.getFullUri(url) : baseProxyUrl; }, /** * 获取请求头 * @param {String} url ajax url * @param {String} refer Header refer * @return {Object} 所有header */ getHeaders: function(url, refer) { var url = cn12306.getFullUri(url), refer = cn12306.getFullUri(refer), headers = {}, prefix = isAndLiebao ? "" : "Fish-"; headers[prefix + "User-Agent"] = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", headers[prefix + "Origin"] = /(https?:\/\/[^\/]+\/)/.exec(url)[1], headers[prefix + "RawUrl"] = url headers[prefix + "Referer"] = refer; // if (!(isAndLiebao || isIos || isWebApp)) { if (!(isAndLiebao || isIos)) { headers["Fish-RawUrl"] = url; } return headers; }, /** * 验证验证码 * @param {String} type 验证码类型 * @param {String} code 需要验证的验证码 * @param {Function} success 成功回调 * @param {Function} error 失败回调 * @param {String} refer Header请求头refer * @return {Ajax Callback} 执行回调 */ checkRandCode: function(type, code, success, error, refer) { var url = cn12306.getFullUri("passcodeNew/checkRandCodeAnsyn"), refer = cn12306.getFullUri(refer), headers = cn12306.getHeaders(url, refer); $.ajax({ type: 'POST', url: cn12306.getAjaxUrl(url), data: { "randCode": code, "rand": type }, dataType: 'json', refer: refer, headers: headers, success: function(data) { if (typeof success == 'function') { success(data); } }, error: function(xhr, type) { if (typeof error == 'function') { error(xhr, type); } } }); }, /** * 测试指定用户是否已经登录 * @param {function} loginedCallback 已经登录回调 * @param {Function} unloginCallback 未登录回调 * @param {Function} errorCallback 错误回调 */ isUserLogined: function(loginedCallback, unloginCallback, errorCallback) { var url = "login/checkUser", refer = 'leftTicket/init'; cn12306.ajax({ url: "login/checkUser", data: { "_json_att": "" }, refer: "leftTicket/init", success: function(json) { if (json && json.data && json.data.flag) { if (json.attributes) { sessionStorage["useratts"] = json.attributes; }; if(!cn12306.checking){ cn12306.checkeUser(); }; (typeof loginedCallback == "function") && loginedCallback(); } else { (typeof unloginCallback == "function") && unloginCallback(); } }, error: function(xhr, type) { (typeof errorCallback == "function") && errorCallback(); } }); }, ajax:function(o){ var obj = { "type" : 'POST', "dataType" : 'json' } $.extend(obj,o||{}); obj["headers"] = cn12306.getHeaders(obj["url"], obj["refer"]); if(typeof obj["url"] != 'undefined'){ obj["url"] = cn12306.getAjaxUrl(cn12306.getFullUri(obj["url"])); } if(typeof obj["refer"] != 'undefined'){ obj["refer"] = cn12306.getAjaxUrl(obj["refer"]); } $.ajax(obj); }, checking :false, checkeUser:function(){ cn12306.checking = true; cn12306.ajax({ url:'login/checkUser', refer:'login/init', success:function(){ setTimeout(cn12306.checkeUser,5000); }, error:function(){ setTimeout(cn12306.checkeUser,5000); } }); } }