與seajs結合解決所有瀏覽器的跨域問題
阿新 • • 發佈:2019-01-06
define(function(require, exports, module) { var $ = require('$'); var rbOws = require('rb-ows'); var json2 = require('json2'); /** * 包含跨域請求工具類 */ var RequestHelper = { GatewayURL : rbOws.real_path + "/anon_httpsindex.html", Busy : false, sendRequest : function(url, handler) { var protocol = location.protocol; // 不是ie瀏覽器不包含XDomainRequest直接使用CORS,或者用html5的postmessage進行請求 if ($.browser.msie && window.XDomainRequest) { if (protocol == "http:") {// 以http開頭 if (RequestHelper.Busy) { setTimeout(function() { RequestHelper.sendRequest(url, handler); }, 50); } else { // 監聽回調回來的資訊 function iframeServer(event) { RequestHelper.Busy = false; $("#ajaxProxy").remove(); EventUtil.removeHandler(window, 'message', iframeServer); // window.removeEventListener('message', serverA); console.log(event.data); handler(json2.parse(event.data)); } EventUtil.addHandler(window, 'message', iframeServer);// 新增事件 RequestHelper.Busy = true; $("body") .append( "<iframe id='ajaxProxy' style='display: none;' src='" + RequestHelper.GatewayURL + "' width='320' height='240'></iframe>"); $("#ajaxProxy") .load( function() { document .getElementById("ajaxProxy").contentWindow .postMessage(url, "*"); // ajaxProxy.postMessage(url,"*"); }); } } // else {// 不是http開頭 // var xdr = new XDomainRequest(); // xdr.open("get", url); // xdr.onprogress = function() { // }; // xdr.ontimeout = function() { // }; // xdr.onerror = function() { // }; // xdr.onload = function() { // handler(xdr.responseText); // }; // setTimeout(function() { // xdr.send(); // }, 0); // } } else {// 除IE直接使用CORS var url_param = url.split("|"); var url = url_param[0]; var param = json2.parse(url_param[1]); $.ajax({ type : "post", url : url, dataType : "json", async : false, data : param, success : function(response) { handler(response); } }); } } }; /** * 事件增加/解除工具 */ var EventUtil = { addHandler : function(element, type, handler) { if (element.addEventListener) { // for ie9+ element.addEventListener(type, handler, false); } else if (element.attachEvent) { // for ie8- element.attachEvent("on" + type, handler); } else { element["on" + type] = handler; } }, removeHandler : function(element, type, handler) { if (element.removeEventListener) { // for ie9+ element.removeEventListener(type, handler, false); } else if (element.detachEvent) { // for ie8- element.detachEvent("on" + type, handler); } else { element["on" + type] = null; } } }; return RequestHelper; });
anon_httpsindex.html
<script type="text/javascript" src="frontend/sea-modules/jquery/1.8.3/jquery-1.8.3.min.js"></script> <script type="text/javascript" src="frontend/sea-modules/json/json2_2.js"></script> <script type="text/javascript"> /** 事件增加/解除工具 */ var EventUtil = { addHandler : function(element, type, handler) { if (element.addEventListener) { //for ie9+ element.addEventListener(type, handler, false); } else if (element.attachEvent) { //for ie8- element.attachEvent("on" + type, handler); } else { element["on" + type] = handler; } }, removeHandler : function(element, type, handler) { if (element.removeEventListener) { //for ie9+ element.removeEventListener(type, handler, false); } else if (element.detachEvent) { //for ie8- element.detachEvent("on" + type, handler); } else { element["on" + type] = null; } } }; //客戶端監聽事件 function iframeClient(event) { var url_param = event.data.split("|"); var url = url_param[0]; var param = JSON.parse(url_param[1]); $.ajax({ type : "post", url : url, dataType : "json", async : false, data : param, success : function(data) { var resStr = JSON.stringify(data); event.source.postMessage(resStr, '*'); EventUtil.removeHandler(window, 'message', iframeClient); //removeEventHandler('message', iframeClient); //window.removeEventListener('message', iframeClient); console.log(event, event.data); } }); } EventUtil.addHandler(window, 'message', iframeClient);//新增事件 </script>
呼叫:
var paramStr = json2.stringify(param); var url = rbOws.real_path + '/anon_register_phoneUniqueness.htm' + jsessionid; var url_param = url + "|" + paramStr; RequestHelper.sendRequest(url_param, processData2); function processData2(data) { if (data.isUnique != '1') { $("#errorMessage").text("該賬號不存在。"); flag = false; return false; } else if (data.checkPwd == 2) { $("#password").attr("value", ""); $("#login_vercode").attr("value", ""); $("#errorMessage").text("密碼不正確,請重新輸入。"); // Response.Redirect("login_generateAuthCode.htm"); refresh(eval($("#login_verpic"))); // window.navigate("login_generateAuthCode.htm"); // top.location='login_generateAuthCode.htm'; // 密碼不正確,重新重新整理驗證碼 flag = false; return false; } }
json2_2下載