天天看点

与seajs结合解决所有浏览器的跨域问题

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下载

继续阅读